mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
GH-104405: Add missing PEP 523 checks (GH-104406)
This commit is contained in:
parent
a10b026f0f
commit
1eb950ca55
6 changed files with 505 additions and 420 deletions
|
@ -783,6 +783,10 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
|
|||
if (version == 0) {
|
||||
goto fail;
|
||||
}
|
||||
if (_PyInterpreterState_GET()->eval_frame) {
|
||||
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OTHER);
|
||||
goto fail;
|
||||
}
|
||||
write_u32(lm_cache->keys_version, version);
|
||||
assert(type->tp_version_tag != 0);
|
||||
write_u32(lm_cache->type_version, type->tp_version_tag);
|
||||
|
@ -845,6 +849,10 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name)
|
|||
if (version == 0) {
|
||||
goto fail;
|
||||
}
|
||||
if (_PyInterpreterState_GET()->eval_frame) {
|
||||
SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OTHER);
|
||||
goto fail;
|
||||
}
|
||||
write_u32(lm_cache->keys_version, version);
|
||||
/* borrowed */
|
||||
write_obj(lm_cache->descr, descr);
|
||||
|
@ -1371,6 +1379,10 @@ _Py_Specialize_BinarySubscr(
|
|||
SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OUT_OF_VERSIONS);
|
||||
goto fail;
|
||||
}
|
||||
if (_PyInterpreterState_GET()->eval_frame) {
|
||||
SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OTHER);
|
||||
goto fail;
|
||||
}
|
||||
PyHeapTypeObject *ht = (PyHeapTypeObject *)container_type;
|
||||
// This pointer is invalidated by PyType_Modified (see the comment on
|
||||
// struct _specialization_cache):
|
||||
|
@ -2192,11 +2204,16 @@ _Py_Specialize_ForIter(PyObject *iter, _Py_CODEUNIT *instr, int oparg)
|
|||
assert(instr[oparg + INLINE_CACHE_ENTRIES_FOR_ITER + 1].op.code == END_FOR ||
|
||||
instr[oparg + INLINE_CACHE_ENTRIES_FOR_ITER + 1].op.code == INSTRUMENTED_END_FOR
|
||||
);
|
||||
if (_PyInterpreterState_GET()->eval_frame) {
|
||||
SPECIALIZATION_FAIL(FOR_ITER, SPEC_FAIL_OTHER);
|
||||
goto failure;
|
||||
}
|
||||
instr->op.code = FOR_ITER_GEN;
|
||||
goto success;
|
||||
}
|
||||
SPECIALIZATION_FAIL(FOR_ITER,
|
||||
_PySpecialization_ClassifyIterator(iter));
|
||||
failure:
|
||||
STAT_INC(FOR_ITER, failure);
|
||||
instr->op.code = FOR_ITER;
|
||||
cache->counter = adaptive_counter_backoff(cache->counter);
|
||||
|
@ -2214,11 +2231,16 @@ _Py_Specialize_Send(PyObject *receiver, _Py_CODEUNIT *instr)
|
|||
_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;
|
||||
}
|
||||
SPECIALIZATION_FAIL(SEND,
|
||||
_PySpecialization_ClassifyIterator(receiver));
|
||||
failure:
|
||||
STAT_INC(SEND, failure);
|
||||
instr->op.code = SEND;
|
||||
cache->counter = adaptive_counter_backoff(cache->counter);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue