mirror of
https://github.com/python/cpython.git
synced 2026-04-20 10:51:00 +00:00
GH-145668: Add FOR_ITER specialization for virtual iterators. Specialize GET_ITER. (GH-147967)
* Add FOR_ITER_VIRTUAL to specialize FOR_ITER for virtual iterators * Add GET_ITER_SELF to specialize GET_ITER for iterators (including generators) * Add GET_ITER_VIRTUAL to specialize GET_ITER for iterables as virtual iterators * Add new (internal) _tp_iteritem function slot to PyTypeObject * Put limited RESUME at start of genexpr for free-threading. Fix up exception handling in genexpr
This commit is contained in:
parent
0fcf2b72d3
commit
600f4dbd54
37 changed files with 2987 additions and 1534 deletions
27
Python/opcode_targets.h
generated
27
Python/opcode_targets.h
generated
|
|
@ -178,6 +178,9 @@ static void *opcode_targets_table[256] = {
|
|||
&&TARGET_FOR_ITER_LIST,
|
||||
&&TARGET_FOR_ITER_RANGE,
|
||||
&&TARGET_FOR_ITER_TUPLE,
|
||||
&&TARGET_FOR_ITER_VIRTUAL,
|
||||
&&TARGET_GET_ITER_SELF,
|
||||
&&TARGET_GET_ITER_VIRTUAL,
|
||||
&&TARGET_JUMP_BACKWARD_JIT,
|
||||
&&TARGET_JUMP_BACKWARD_NO_JIT,
|
||||
&&TARGET_LOAD_ATTR_CLASS,
|
||||
|
|
@ -230,9 +233,6 @@ static void *opcode_targets_table[256] = {
|
|||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&TARGET_INSTRUMENTED_END_FOR,
|
||||
&&TARGET_INSTRUMENTED_POP_ITER,
|
||||
&&TARGET_INSTRUMENTED_END_SEND,
|
||||
|
|
@ -473,9 +473,9 @@ static void *opcode_tracing_targets_table[256] = {
|
|||
&&TARGET_TRACE_RECORD,
|
||||
&&TARGET_TRACE_RECORD,
|
||||
&&TARGET_TRACE_RECORD,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&TARGET_TRACE_RECORD,
|
||||
&&TARGET_TRACE_RECORD,
|
||||
&&TARGET_TRACE_RECORD,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
&&_unknown_opcode,
|
||||
|
|
@ -621,10 +621,13 @@ static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_GEN(TAIL_CALL_PARAMS);
|
|||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_LIST(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_VIRTUAL(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_FROM(TAIL_CALL_PARAMS);
|
||||
static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_NAME(TAIL_CALL_PARAMS);
|
||||
|
|
@ -862,10 +865,13 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
|
|||
[FOR_ITER_LIST] = _TAIL_CALL_FOR_ITER_LIST,
|
||||
[FOR_ITER_RANGE] = _TAIL_CALL_FOR_ITER_RANGE,
|
||||
[FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE,
|
||||
[FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL,
|
||||
[GET_AITER] = _TAIL_CALL_GET_AITER,
|
||||
[GET_ANEXT] = _TAIL_CALL_GET_ANEXT,
|
||||
[GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE,
|
||||
[GET_ITER] = _TAIL_CALL_GET_ITER,
|
||||
[GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF,
|
||||
[GET_ITER_VIRTUAL] = _TAIL_CALL_GET_ITER_VIRTUAL,
|
||||
[GET_LEN] = _TAIL_CALL_GET_LEN,
|
||||
[IMPORT_FROM] = _TAIL_CALL_IMPORT_FROM,
|
||||
[IMPORT_NAME] = _TAIL_CALL_IMPORT_NAME,
|
||||
|
|
@ -1008,9 +1014,6 @@ static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
|
|||
[125] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[126] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[127] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[214] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[215] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[216] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[217] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[218] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[219] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
|
|
@ -1120,10 +1123,13 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
|
|||
[FOR_ITER_LIST] = _TAIL_CALL_TRACE_RECORD,
|
||||
[FOR_ITER_RANGE] = _TAIL_CALL_TRACE_RECORD,
|
||||
[FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD,
|
||||
[FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_AITER] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_ANEXT] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_ITER] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
|
||||
[GET_LEN] = _TAIL_CALL_TRACE_RECORD,
|
||||
[IMPORT_FROM] = _TAIL_CALL_TRACE_RECORD,
|
||||
[IMPORT_NAME] = _TAIL_CALL_TRACE_RECORD,
|
||||
|
|
@ -1266,9 +1272,6 @@ static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
|
|||
[125] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[126] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[127] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[214] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[215] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[216] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[217] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[218] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
[219] = _TAIL_CALL_UNKNOWN_OPCODE,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue