From c57e981381ebbcd732d5814ec7f4c0d6a78cc3ca Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 2 Jun 2023 00:56:20 +0100 Subject: [PATCH 1/5] Break LOAD_GLOBAL specializations in micro-ops. WIP. --- Include/internal/pycore_code.h | 2 +- Python/bytecodes.c | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 75a23f3f5af560..af0c32f9e31c5b 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -19,9 +19,9 @@ extern "C" { typedef struct { uint16_t counter; - uint16_t index; uint16_t module_keys_version; uint16_t builtin_keys_version; + uint16_t index; } _PyLoadGlobalCache; #define INLINE_CACHE_ENTRIES_LOAD_GLOBAL CACHE_ENTRIES(_PyLoadGlobalCache) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index 43e3877268873d..9bc65ef902a456 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1314,11 +1314,25 @@ dummy_func( null = NULL; } - inst(LOAD_GLOBAL_MODULE, (unused/1, index/1, version/1, unused/1 -- null if (oparg & 1), res)) { - DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); + op(_SKIP_CACHE, (unused/1 -- )) { + } + + op(_GUARD_GLOBALS_VERSION, (version/1 --)) { PyDictObject *dict = (PyDictObject *)GLOBALS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + } + + op(_GUARD_BUILTINS_VERSION, (version/1 --)) { + PyDictObject *dict = (PyDictObject *)BUILTINS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); assert(DK_IS_UNICODE(dict->ma_keys)); + } + + op(_LOAD_GLOBAL_MODULE, (index/1 -- null if (oparg & 1), res)) { + PyDictObject *dict = (PyDictObject *)GLOBALS(); PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(dict->ma_keys); res = entries[index].me_value; DEOPT_IF(res == NULL, LOAD_GLOBAL); @@ -1327,15 +1341,8 @@ dummy_func( null = NULL; } - inst(LOAD_GLOBAL_BUILTIN, (unused/1, index/1, mod_version/1, bltn_version/1 -- null if (oparg & 1), res)) { - DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); - DEOPT_IF(!PyDict_CheckExact(BUILTINS()), LOAD_GLOBAL); - PyDictObject *mdict = (PyDictObject *)GLOBALS(); + op(_LOAD_GLOBAL_BUILTINS, (index/1 -- null if (oparg & 1), res)) { PyDictObject *bdict = (PyDictObject *)BUILTINS(); - assert(opcode == LOAD_GLOBAL_BUILTIN); - DEOPT_IF(mdict->ma_keys->dk_version != mod_version, LOAD_GLOBAL); - DEOPT_IF(bdict->ma_keys->dk_version != bltn_version, LOAD_GLOBAL); - assert(DK_IS_UNICODE(bdict->ma_keys)); PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(bdict->ma_keys); res = entries[index].me_value; DEOPT_IF(res == NULL, LOAD_GLOBAL); @@ -1344,6 +1351,10 @@ dummy_func( null = NULL; } + macro(LOAD_GLOBAL_MODULE) = _SKIP_CACHE + _GUARD_GLOBALS_VERSION + _SKIP_CACHE + _LOAD_GLOBAL_MODULE; + + macro(LOAD_GLOBAL_BUILTIN) = _SKIP_CACHE + _GUARD_GLOBALS_VERSION + _GUARD_BUILTINS_VERSION + _LOAD_GLOBAL_BUILTINS; + inst(DELETE_FAST, (--)) { PyObject *v = GETLOCAL(oparg); ERROR_IF(v == NULL, unbound_local_error); From 87f27cd9809e1661867c875463bc3aba792625fa Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 12 Jul 2023 10:42:23 +0100 Subject: [PATCH 2/5] Generate files --- Python/executor_cases.c.h | 314 ++++++++-------- Python/generated_cases.c.h | 722 +++++++++++++++++++------------------ Python/opcode_metadata.h | 10 +- 3 files changed, 555 insertions(+), 491 deletions(-) diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index ba854be7f6c05e..fd044c7da53426 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1204,17 +1204,43 @@ break; } + case _SKIP_CACHE: { + break; + } + + case _GUARD_GLOBALS_VERSION: { + uint16_t version = (uint16_t)operand; + #line 1408 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)GLOBALS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + #line 1219 "Python/executor_cases.c.h" + break; + } + + case _GUARD_BUILTINS_VERSION: { + uint16_t version = (uint16_t)operand; + #line 1415 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)BUILTINS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + #line 1230 "Python/executor_cases.c.h" + break; + } + case DELETE_FAST: { - #line 1435 "Python/bytecodes.c" + #line 1446 "Python/bytecodes.c" PyObject *v = GETLOCAL(oparg); if (v == NULL) goto unbound_local_error; SETLOCAL(oparg, NULL); - #line 1213 "Python/executor_cases.c.h" + #line 1239 "Python/executor_cases.c.h" break; } case DELETE_DEREF: { - #line 1452 "Python/bytecodes.c" + #line 1463 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); // Can't use ERROR_IF here. @@ -1225,14 +1251,14 @@ } PyCell_SET(cell, NULL); Py_DECREF(oldobj); - #line 1229 "Python/executor_cases.c.h" + #line 1255 "Python/executor_cases.c.h" break; } case LOAD_FROM_DICT_OR_DEREF: { PyObject *class_dict = stack_pointer[-1]; PyObject *value; - #line 1465 "Python/bytecodes.c" + #line 1476 "Python/bytecodes.c" PyObject *name; assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); @@ -1267,14 +1293,14 @@ } Py_INCREF(value); } - #line 1271 "Python/executor_cases.c.h" + #line 1297 "Python/executor_cases.c.h" stack_pointer[-1] = value; break; } case LOAD_DEREF: { PyObject *value; - #line 1502 "Python/bytecodes.c" + #line 1513 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); value = PyCell_GET(cell); if (value == NULL) { @@ -1282,7 +1308,7 @@ if (true) goto error; } Py_INCREF(value); - #line 1286 "Python/executor_cases.c.h" + #line 1312 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = value; break; @@ -1290,18 +1316,18 @@ case STORE_DEREF: { PyObject *v = stack_pointer[-1]; - #line 1512 "Python/bytecodes.c" + #line 1523 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); PyCell_SET(cell, v); Py_XDECREF(oldobj); - #line 1299 "Python/executor_cases.c.h" + #line 1325 "Python/executor_cases.c.h" STACK_SHRINK(1); break; } case COPY_FREE_VARS: { - #line 1519 "Python/bytecodes.c" + #line 1530 "Python/bytecodes.c" /* Copy closure variables to free variables */ PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyFunction_Check(frame->f_funcobj)); @@ -1312,22 +1338,22 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = Py_NewRef(o); } - #line 1316 "Python/executor_cases.c.h" + #line 1342 "Python/executor_cases.c.h" break; } case BUILD_STRING: { PyObject **pieces = (stack_pointer - oparg); PyObject *str; - #line 1532 "Python/bytecodes.c" + #line 1543 "Python/bytecodes.c" str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg); - #line 1325 "Python/executor_cases.c.h" + #line 1351 "Python/executor_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(pieces[_i]); } - #line 1534 "Python/bytecodes.c" + #line 1545 "Python/bytecodes.c" if (str == NULL) { STACK_SHRINK(oparg); goto error; } - #line 1331 "Python/executor_cases.c.h" + #line 1357 "Python/executor_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = str; @@ -1337,10 +1363,10 @@ case BUILD_TUPLE: { PyObject **values = (stack_pointer - oparg); PyObject *tup; - #line 1538 "Python/bytecodes.c" + #line 1549 "Python/bytecodes.c" tup = _PyTuple_FromArraySteal(values, oparg); if (tup == NULL) { STACK_SHRINK(oparg); goto error; } - #line 1344 "Python/executor_cases.c.h" + #line 1370 "Python/executor_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = tup; @@ -1350,10 +1376,10 @@ case BUILD_LIST: { PyObject **values = (stack_pointer - oparg); PyObject *list; - #line 1543 "Python/bytecodes.c" + #line 1554 "Python/bytecodes.c" list = _PyList_FromArraySteal(values, oparg); if (list == NULL) { STACK_SHRINK(oparg); goto error; } - #line 1357 "Python/executor_cases.c.h" + #line 1383 "Python/executor_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = list; @@ -1363,7 +1389,7 @@ case LIST_EXTEND: { PyObject *iterable = stack_pointer[-1]; PyObject *list = stack_pointer[-(2 + (oparg-1))]; - #line 1548 "Python/bytecodes.c" + #line 1559 "Python/bytecodes.c" PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); if (none_val == NULL) { if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) && @@ -1374,13 +1400,13 @@ "Value after * must be an iterable, not %.200s", Py_TYPE(iterable)->tp_name); } - #line 1378 "Python/executor_cases.c.h" + #line 1404 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 1559 "Python/bytecodes.c" + #line 1570 "Python/bytecodes.c" if (true) goto pop_1_error; } assert(Py_IsNone(none_val)); - #line 1384 "Python/executor_cases.c.h" + #line 1410 "Python/executor_cases.c.h" Py_DECREF(iterable); STACK_SHRINK(1); break; @@ -1389,13 +1415,13 @@ case SET_UPDATE: { PyObject *iterable = stack_pointer[-1]; PyObject *set = stack_pointer[-(2 + (oparg-1))]; - #line 1566 "Python/bytecodes.c" + #line 1577 "Python/bytecodes.c" int err = _PySet_Update(set, iterable); - #line 1395 "Python/executor_cases.c.h" + #line 1421 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 1568 "Python/bytecodes.c" + #line 1579 "Python/bytecodes.c" if (err < 0) goto pop_1_error; - #line 1399 "Python/executor_cases.c.h" + #line 1425 "Python/executor_cases.c.h" STACK_SHRINK(1); break; } @@ -1403,7 +1429,7 @@ case BUILD_SET: { PyObject **values = (stack_pointer - oparg); PyObject *set; - #line 1572 "Python/bytecodes.c" + #line 1583 "Python/bytecodes.c" set = PySet_New(NULL); if (set == NULL) goto error; @@ -1418,7 +1444,7 @@ Py_DECREF(set); if (true) { STACK_SHRINK(oparg); goto error; } } - #line 1422 "Python/executor_cases.c.h" + #line 1448 "Python/executor_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = set; @@ -1428,7 +1454,7 @@ case BUILD_MAP: { PyObject **values = (stack_pointer - oparg*2); PyObject *map; - #line 1589 "Python/bytecodes.c" + #line 1600 "Python/bytecodes.c" map = _PyDict_FromItems( values, 2, values+1, 2, @@ -1436,13 +1462,13 @@ if (map == NULL) goto error; - #line 1440 "Python/executor_cases.c.h" + #line 1466 "Python/executor_cases.c.h" for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } - #line 1597 "Python/bytecodes.c" + #line 1608 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg*2); goto error; } - #line 1446 "Python/executor_cases.c.h" + #line 1472 "Python/executor_cases.c.h" STACK_SHRINK(oparg*2); STACK_GROW(1); stack_pointer[-1] = map; @@ -1450,7 +1476,7 @@ } case SETUP_ANNOTATIONS: { - #line 1601 "Python/bytecodes.c" + #line 1612 "Python/bytecodes.c" int err; PyObject *ann_dict; if (LOCALS() == NULL) { @@ -1490,7 +1516,7 @@ Py_DECREF(ann_dict); } } - #line 1494 "Python/executor_cases.c.h" + #line 1520 "Python/executor_cases.c.h" break; } @@ -1498,7 +1524,7 @@ PyObject *keys = stack_pointer[-1]; PyObject **values = (stack_pointer - (1 + oparg)); PyObject *map; - #line 1643 "Python/bytecodes.c" + #line 1654 "Python/bytecodes.c" if (!PyTuple_CheckExact(keys) || PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { _PyErr_SetString(tstate, PyExc_SystemError, @@ -1508,14 +1534,14 @@ map = _PyDict_FromItems( &PyTuple_GET_ITEM(keys, 0), 1, values, 1, oparg); - #line 1512 "Python/executor_cases.c.h" + #line 1538 "Python/executor_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(values[_i]); } Py_DECREF(keys); - #line 1653 "Python/bytecodes.c" + #line 1664 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; } - #line 1519 "Python/executor_cases.c.h" + #line 1545 "Python/executor_cases.c.h" STACK_SHRINK(oparg); stack_pointer[-1] = map; break; @@ -1523,7 +1549,7 @@ case DICT_UPDATE: { PyObject *update = stack_pointer[-1]; - #line 1657 "Python/bytecodes.c" + #line 1668 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (PyDict_Update(dict, update) < 0) { if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) { @@ -1531,12 +1557,12 @@ "'%.200s' object is not a mapping", Py_TYPE(update)->tp_name); } - #line 1535 "Python/executor_cases.c.h" + #line 1561 "Python/executor_cases.c.h" Py_DECREF(update); - #line 1665 "Python/bytecodes.c" + #line 1676 "Python/bytecodes.c" if (true) goto pop_1_error; } - #line 1540 "Python/executor_cases.c.h" + #line 1566 "Python/executor_cases.c.h" Py_DECREF(update); STACK_SHRINK(1); break; @@ -1544,17 +1570,17 @@ case DICT_MERGE: { PyObject *update = stack_pointer[-1]; - #line 1671 "Python/bytecodes.c" + #line 1682 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (_PyDict_MergeEx(dict, update, 2) < 0) { format_kwargs_error(tstate, PEEK(3 + oparg), update); - #line 1553 "Python/executor_cases.c.h" + #line 1579 "Python/executor_cases.c.h" Py_DECREF(update); - #line 1676 "Python/bytecodes.c" + #line 1687 "Python/bytecodes.c" if (true) goto pop_1_error; } - #line 1558 "Python/executor_cases.c.h" + #line 1584 "Python/executor_cases.c.h" Py_DECREF(update); STACK_SHRINK(1); break; @@ -1563,13 +1589,13 @@ case MAP_ADD: { PyObject *value = stack_pointer[-1]; PyObject *key = stack_pointer[-2]; - #line 1682 "Python/bytecodes.c" + #line 1693 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack assert(PyDict_CheckExact(dict)); /* dict[key] = value */ // Do not DECREF INPUTS because the function steals the references if (_PyDict_SetItem_Take2((PyDictObject *)dict, key, value) != 0) goto pop_2_error; - #line 1573 "Python/executor_cases.c.h" + #line 1599 "Python/executor_cases.c.h" STACK_SHRINK(2); break; } @@ -1580,20 +1606,20 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1765 "Python/bytecodes.c" + #line 1776 "Python/bytecodes.c" assert(!(oparg & 1)); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); res = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); - #line 1591 "Python/executor_cases.c.h" + #line 1617 "Python/executor_cases.c.h" Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1772 "Python/bytecodes.c" + #line 1783 "Python/bytecodes.c" if (res == NULL) goto pop_3_error; - #line 1597 "Python/executor_cases.c.h" + #line 1623 "Python/executor_cases.c.h" STACK_SHRINK(2); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -1607,7 +1633,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2; PyObject *res; - #line 1776 "Python/bytecodes.c" + #line 1787 "Python/bytecodes.c" assert(oparg & 1); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -1630,7 +1656,7 @@ res = res2; res2 = NULL; } - #line 1634 "Python/executor_cases.c.h" + #line 1660 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; stack_pointer[-2] = res2; @@ -1642,7 +1668,7 @@ PyObject *owner = stack_pointer[-1]; PyObject *res2 = NULL; PyObject *res; - #line 1817 "Python/bytecodes.c" + #line 1828 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyAttrCache *cache = (_PyAttrCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -1676,9 +1702,9 @@ NULL | meth | arg1 | ... | argN */ - #line 1680 "Python/executor_cases.c.h" + #line 1706 "Python/executor_cases.c.h" Py_DECREF(owner); - #line 1851 "Python/bytecodes.c" + #line 1862 "Python/bytecodes.c" if (meth == NULL) goto pop_1_error; res2 = NULL; res = meth; @@ -1687,12 +1713,12 @@ else { /* Classic, pushes one value. */ res = PyObject_GetAttr(owner, name); - #line 1691 "Python/executor_cases.c.h" + #line 1717 "Python/executor_cases.c.h" Py_DECREF(owner); - #line 1860 "Python/bytecodes.c" + #line 1871 "Python/bytecodes.c" if (res == NULL) goto pop_1_error; } - #line 1696 "Python/executor_cases.c.h" + #line 1722 "Python/executor_cases.c.h" STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; if (oparg & 1) { stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))] = res2; } @@ -1704,7 +1730,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2093 "Python/bytecodes.c" + #line 2104 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyCompareOpCache *cache = (_PyCompareOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -1717,10 +1743,10 @@ #endif /* ENABLE_SPECIALIZATION */ assert((oparg >> 5) <= Py_GE); res = PyObject_RichCompare(left, right, oparg >> 5); - #line 1721 "Python/executor_cases.c.h" + #line 1747 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2106 "Python/bytecodes.c" + #line 2117 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; if (oparg & 16) { int res_bool = PyObject_IsTrue(res); @@ -1728,7 +1754,7 @@ if (res_bool < 0) goto pop_2_error; res = res_bool ? Py_True : Py_False; } - #line 1732 "Python/executor_cases.c.h" + #line 1758 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -1738,7 +1764,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2116 "Python/bytecodes.c" + #line 2127 "Python/bytecodes.c" DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -1750,7 +1776,7 @@ _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 1754 "Python/executor_cases.c.h" + #line 1780 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -1760,7 +1786,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2131 "Python/bytecodes.c" + #line 2142 "Python/bytecodes.c" DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP); DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP); @@ -1776,7 +1802,7 @@ _Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free); res = (sign_ish & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 1780 "Python/executor_cases.c.h" + #line 1806 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -1786,7 +1812,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2150 "Python/bytecodes.c" + #line 2161 "Python/bytecodes.c" DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -1799,7 +1825,7 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 1803 "Python/executor_cases.c.h" + #line 1829 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -1809,14 +1835,14 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2165 "Python/bytecodes.c" + #line 2176 "Python/bytecodes.c" int res = Py_Is(left, right) ^ oparg; - #line 1815 "Python/executor_cases.c.h" + #line 1841 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2167 "Python/bytecodes.c" + #line 2178 "Python/bytecodes.c" b = res ? Py_True : Py_False; - #line 1820 "Python/executor_cases.c.h" + #line 1846 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = b; break; @@ -1826,15 +1852,15 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2171 "Python/bytecodes.c" + #line 2182 "Python/bytecodes.c" int res = PySequence_Contains(right, left); - #line 1832 "Python/executor_cases.c.h" + #line 1858 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2173 "Python/bytecodes.c" + #line 2184 "Python/bytecodes.c" if (res < 0) goto pop_2_error; b = (res ^ oparg) ? Py_True : Py_False; - #line 1838 "Python/executor_cases.c.h" + #line 1864 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = b; break; @@ -1845,12 +1871,12 @@ PyObject *exc_value = stack_pointer[-2]; PyObject *rest; PyObject *match; - #line 2178 "Python/bytecodes.c" + #line 2189 "Python/bytecodes.c" if (check_except_star_type_valid(tstate, match_type) < 0) { - #line 1851 "Python/executor_cases.c.h" + #line 1877 "Python/executor_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2180 "Python/bytecodes.c" + #line 2191 "Python/bytecodes.c" if (true) goto pop_2_error; } @@ -1858,10 +1884,10 @@ rest = NULL; int res = exception_group_match(exc_value, match_type, &match, &rest); - #line 1862 "Python/executor_cases.c.h" + #line 1888 "Python/executor_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2188 "Python/bytecodes.c" + #line 2199 "Python/bytecodes.c" if (res < 0) goto pop_2_error; assert((match == NULL) == (rest == NULL)); @@ -1870,7 +1896,7 @@ if (!Py_IsNone(match)) { PyErr_SetHandledException(match); } - #line 1874 "Python/executor_cases.c.h" + #line 1900 "Python/executor_cases.c.h" stack_pointer[-1] = match; stack_pointer[-2] = rest; break; @@ -1880,21 +1906,21 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2199 "Python/bytecodes.c" + #line 2210 "Python/bytecodes.c" assert(PyExceptionInstance_Check(left)); if (check_except_type_valid(tstate, right) < 0) { - #line 1887 "Python/executor_cases.c.h" + #line 1913 "Python/executor_cases.c.h" Py_DECREF(right); - #line 2202 "Python/bytecodes.c" + #line 2213 "Python/bytecodes.c" if (true) goto pop_1_error; } int res = PyErr_GivenExceptionMatches(left, right); - #line 1894 "Python/executor_cases.c.h" + #line 1920 "Python/executor_cases.c.h" Py_DECREF(right); - #line 2207 "Python/bytecodes.c" + #line 2218 "Python/bytecodes.c" b = res ? Py_True : Py_False; - #line 1898 "Python/executor_cases.c.h" + #line 1924 "Python/executor_cases.c.h" stack_pointer[-1] = b; break; } @@ -1902,17 +1928,17 @@ case IS_NONE: { PyObject *value = stack_pointer[-1]; PyObject *b; - #line 2286 "Python/bytecodes.c" + #line 2297 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } else { b = Py_False; - #line 1912 "Python/executor_cases.c.h" + #line 1938 "Python/executor_cases.c.h" Py_DECREF(value); - #line 2292 "Python/bytecodes.c" + #line 2303 "Python/bytecodes.c" } - #line 1916 "Python/executor_cases.c.h" + #line 1942 "Python/executor_cases.c.h" stack_pointer[-1] = b; break; } @@ -1920,13 +1946,13 @@ case GET_LEN: { PyObject *obj = stack_pointer[-1]; PyObject *len_o; - #line 2309 "Python/bytecodes.c" + #line 2320 "Python/bytecodes.c" // PUSH(len(TOS)) Py_ssize_t len_i = PyObject_Length(obj); if (len_i < 0) goto error; len_o = PyLong_FromSsize_t(len_i); if (len_o == NULL) goto error; - #line 1930 "Python/executor_cases.c.h" + #line 1956 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = len_o; break; @@ -1937,16 +1963,16 @@ PyObject *type = stack_pointer[-2]; PyObject *subject = stack_pointer[-3]; PyObject *attrs; - #line 2317 "Python/bytecodes.c" + #line 2328 "Python/bytecodes.c" // Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or // None on failure. assert(PyTuple_CheckExact(names)); attrs = match_class(tstate, subject, type, oparg, names); - #line 1946 "Python/executor_cases.c.h" + #line 1972 "Python/executor_cases.c.h" Py_DECREF(subject); Py_DECREF(type); Py_DECREF(names); - #line 2322 "Python/bytecodes.c" + #line 2333 "Python/bytecodes.c" if (attrs) { assert(PyTuple_CheckExact(attrs)); // Success! } @@ -1954,7 +1980,7 @@ if (_PyErr_Occurred(tstate)) goto pop_3_error; attrs = Py_None; // Failure! } - #line 1958 "Python/executor_cases.c.h" + #line 1984 "Python/executor_cases.c.h" STACK_SHRINK(2); stack_pointer[-1] = attrs; break; @@ -1963,10 +1989,10 @@ case MATCH_MAPPING: { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2332 "Python/bytecodes.c" + #line 2343 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? Py_True : Py_False; - #line 1970 "Python/executor_cases.c.h" + #line 1996 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; break; @@ -1975,10 +2001,10 @@ case MATCH_SEQUENCE: { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2337 "Python/bytecodes.c" + #line 2348 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? Py_True : Py_False; - #line 1982 "Python/executor_cases.c.h" + #line 2008 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; break; @@ -1988,11 +2014,11 @@ PyObject *keys = stack_pointer[-1]; PyObject *subject = stack_pointer[-2]; PyObject *values_or_none; - #line 2342 "Python/bytecodes.c" + #line 2353 "Python/bytecodes.c" // On successful match, PUSH(values). Otherwise, PUSH(None). values_or_none = match_keys(tstate, subject, keys); if (values_or_none == NULL) goto error; - #line 1996 "Python/executor_cases.c.h" + #line 2022 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = values_or_none; break; @@ -2001,14 +2027,14 @@ case GET_ITER: { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2348 "Python/bytecodes.c" + #line 2359 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ iter = PyObject_GetIter(iterable); - #line 2008 "Python/executor_cases.c.h" + #line 2034 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 2351 "Python/bytecodes.c" + #line 2362 "Python/bytecodes.c" if (iter == NULL) goto pop_1_error; - #line 2012 "Python/executor_cases.c.h" + #line 2038 "Python/executor_cases.c.h" stack_pointer[-1] = iter; break; } @@ -2016,7 +2042,7 @@ case GET_YIELD_FROM_ITER: { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2355 "Python/bytecodes.c" + #line 2366 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ if (PyCoro_CheckExact(iterable)) { /* `iterable` is a coroutine */ @@ -2039,11 +2065,11 @@ if (iter == NULL) { goto error; } - #line 2043 "Python/executor_cases.c.h" + #line 2069 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 2378 "Python/bytecodes.c" + #line 2389 "Python/bytecodes.c" } - #line 2047 "Python/executor_cases.c.h" + #line 2073 "Python/executor_cases.c.h" stack_pointer[-1] = iter; break; } @@ -2053,7 +2079,7 @@ PyObject *lasti = stack_pointer[-3]; PyObject *exit_func = stack_pointer[-4]; PyObject *res; - #line 2610 "Python/bytecodes.c" + #line 2621 "Python/bytecodes.c" /* At the top of the stack are 4 values: - val: TOP = exc_info() - unused: SECOND = previous exception @@ -2074,7 +2100,7 @@ res = PyObject_Vectorcall(exit_func, stack + 1, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); if (res == NULL) goto error; - #line 2078 "Python/executor_cases.c.h" + #line 2104 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; break; @@ -2083,7 +2109,7 @@ case PUSH_EXC_INFO: { PyObject *new_exc = stack_pointer[-1]; PyObject *prev_exc; - #line 2649 "Python/bytecodes.c" + #line 2660 "Python/bytecodes.c" _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = exc_info->exc_value; @@ -2093,7 +2119,7 @@ } assert(PyExceptionInstance_Check(new_exc)); exc_info->exc_value = Py_NewRef(new_exc); - #line 2097 "Python/executor_cases.c.h" + #line 2123 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = new_exc; stack_pointer[-2] = prev_exc; @@ -2102,7 +2128,7 @@ case EXIT_INIT_CHECK: { PyObject *should_be_none = stack_pointer[-1]; - #line 3048 "Python/bytecodes.c" + #line 3059 "Python/bytecodes.c" assert(STACK_LEVEL() == 2); if (should_be_none != Py_None) { PyErr_Format(PyExc_TypeError, @@ -2110,7 +2136,7 @@ Py_TYPE(should_be_none)->tp_name); goto error; } - #line 2114 "Python/executor_cases.c.h" + #line 2140 "Python/executor_cases.c.h" STACK_SHRINK(1); break; } @@ -2118,7 +2144,7 @@ case MAKE_FUNCTION: { PyObject *codeobj = stack_pointer[-1]; PyObject *func; - #line 3462 "Python/bytecodes.c" + #line 3473 "Python/bytecodes.c" PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -2130,7 +2156,7 @@ func_obj->func_version = ((PyCodeObject *)codeobj)->co_version; func = (PyObject *)func_obj; - #line 2134 "Python/executor_cases.c.h" + #line 2160 "Python/executor_cases.c.h" stack_pointer[-1] = func; break; } @@ -2138,7 +2164,7 @@ case SET_FUNCTION_ATTRIBUTE: { PyObject *func = stack_pointer[-1]; PyObject *attr = stack_pointer[-2]; - #line 3476 "Python/bytecodes.c" + #line 3487 "Python/bytecodes.c" assert(PyFunction_Check(func)); PyFunctionObject *func_obj = (PyFunctionObject *)func; switch(oparg) { @@ -2163,7 +2189,7 @@ default: Py_UNREACHABLE(); } - #line 2167 "Python/executor_cases.c.h" + #line 2193 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = func; break; @@ -2174,15 +2200,15 @@ PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))]; PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))]; PyObject *slice; - #line 3526 "Python/bytecodes.c" + #line 3537 "Python/bytecodes.c" slice = PySlice_New(start, stop, step); - #line 2180 "Python/executor_cases.c.h" + #line 2206 "Python/executor_cases.c.h" Py_DECREF(start); Py_DECREF(stop); Py_XDECREF(step); - #line 3528 "Python/bytecodes.c" + #line 3539 "Python/bytecodes.c" if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; } - #line 2186 "Python/executor_cases.c.h" + #line 2212 "Python/executor_cases.c.h" STACK_SHRINK(((oparg == 3) ? 1 : 0)); STACK_SHRINK(1); stack_pointer[-1] = slice; @@ -2192,14 +2218,14 @@ case CONVERT_VALUE: { PyObject *value = stack_pointer[-1]; PyObject *result; - #line 3532 "Python/bytecodes.c" + #line 3543 "Python/bytecodes.c" convertion_func_ptr conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = CONVERSION_FUNCTIONS[oparg]; result = conv_fn(value); Py_DECREF(value); if (result == NULL) goto pop_1_error; - #line 2203 "Python/executor_cases.c.h" + #line 2229 "Python/executor_cases.c.h" stack_pointer[-1] = result; break; } @@ -2207,7 +2233,7 @@ case FORMAT_SIMPLE: { PyObject *value = stack_pointer[-1]; PyObject *res; - #line 3541 "Python/bytecodes.c" + #line 3552 "Python/bytecodes.c" /* If value is a unicode object, then we know the result * of format(value) is value itself. */ if (!PyUnicode_CheckExact(value)) { @@ -2218,7 +2244,7 @@ else { res = value; } - #line 2222 "Python/executor_cases.c.h" + #line 2248 "Python/executor_cases.c.h" stack_pointer[-1] = res; break; } @@ -2227,12 +2253,12 @@ PyObject *fmt_spec = stack_pointer[-1]; PyObject *value = stack_pointer[-2]; PyObject *res; - #line 3554 "Python/bytecodes.c" + #line 3565 "Python/bytecodes.c" res = PyObject_Format(value, fmt_spec); Py_DECREF(value); Py_DECREF(fmt_spec); if (res == NULL) goto pop_2_error; - #line 2236 "Python/executor_cases.c.h" + #line 2262 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -2241,10 +2267,10 @@ case COPY: { PyObject *bottom = stack_pointer[-(1 + (oparg-1))]; PyObject *top; - #line 3561 "Python/bytecodes.c" + #line 3572 "Python/bytecodes.c" assert(oparg > 0); top = Py_NewRef(bottom); - #line 2248 "Python/executor_cases.c.h" + #line 2274 "Python/executor_cases.c.h" STACK_GROW(1); stack_pointer[-1] = top; break; @@ -2255,7 +2281,7 @@ PyObject *rhs = stack_pointer[-1]; PyObject *lhs = stack_pointer[-2]; PyObject *res; - #line 3566 "Python/bytecodes.c" + #line 3577 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2270,12 +2296,12 @@ assert((unsigned)oparg < Py_ARRAY_LENGTH(binary_ops)); assert(binary_ops[oparg]); res = binary_ops[oparg](lhs, rhs); - #line 2274 "Python/executor_cases.c.h" + #line 2300 "Python/executor_cases.c.h" Py_DECREF(lhs); Py_DECREF(rhs); - #line 3581 "Python/bytecodes.c" + #line 3592 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; - #line 2279 "Python/executor_cases.c.h" + #line 2305 "Python/executor_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; break; @@ -2284,9 +2310,9 @@ case SWAP: { PyObject *top = stack_pointer[-1]; PyObject *bottom = stack_pointer[-(2 + (oparg-2))]; - #line 3586 "Python/bytecodes.c" + #line 3597 "Python/bytecodes.c" assert(oparg >= 2); - #line 2290 "Python/executor_cases.c.h" + #line 2316 "Python/executor_cases.c.h" stack_pointer[-1] = bottom; stack_pointer[-(2 + (oparg-2))] = top; break; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 325090a60f9d54..8232448d6e7eb6 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -1976,71 +1976,103 @@ } TARGET(LOAD_GLOBAL_MODULE) { - PyObject *null = NULL; - PyObject *res; - uint16_t index = read_u16(&next_instr[1].cache); - uint16_t version = read_u16(&next_instr[2].cache); - #line 1405 "Python/bytecodes.c" - DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); - PyDictObject *dict = (PyDictObject *)GLOBALS(); - DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); - assert(DK_IS_UNICODE(dict->ma_keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(dict->ma_keys); - res = entries[index].me_value; - DEOPT_IF(res == NULL, LOAD_GLOBAL); - Py_INCREF(res); - STAT_INC(LOAD_GLOBAL, hit); - null = NULL; - #line 1995 "Python/generated_cases.c.h" + PyObject *_tmp_1; + PyObject *_tmp_2; + { + } + { + uint16_t version = read_u16(&next_instr[1].cache); + #line 1408 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)GLOBALS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + #line 1991 "Python/generated_cases.c.h" + } + { + } + { + PyObject *null = NULL; + PyObject *res; + uint16_t index = read_u16(&next_instr[3].cache); + #line 1422 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)GLOBALS(); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(dict->ma_keys); + res = entries[index].me_value; + DEOPT_IF(res == NULL, LOAD_GLOBAL); + Py_INCREF(res); + STAT_INC(LOAD_GLOBAL, hit); + null = NULL; + #line 2007 "Python/generated_cases.c.h" + if (oparg & 1) { _tmp_2 = null; } + _tmp_1 = res; + } + next_instr += 4; STACK_GROW(1); STACK_GROW(((oparg & 1) ? 1 : 0)); - stack_pointer[-1] = res; - if (oparg & 1) { stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))] = null; } - next_instr += 4; + stack_pointer[-1] = _tmp_1; + if (oparg & 1) { stack_pointer[-2] = _tmp_2; } DISPATCH(); } TARGET(LOAD_GLOBAL_BUILTIN) { - PyObject *null = NULL; - PyObject *res; - uint16_t index = read_u16(&next_instr[1].cache); - uint16_t mod_version = read_u16(&next_instr[2].cache); - uint16_t bltn_version = read_u16(&next_instr[3].cache); - #line 1418 "Python/bytecodes.c" - DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); - DEOPT_IF(!PyDict_CheckExact(BUILTINS()), LOAD_GLOBAL); - PyDictObject *mdict = (PyDictObject *)GLOBALS(); - PyDictObject *bdict = (PyDictObject *)BUILTINS(); - assert(opcode == LOAD_GLOBAL_BUILTIN); - DEOPT_IF(mdict->ma_keys->dk_version != mod_version, LOAD_GLOBAL); - DEOPT_IF(bdict->ma_keys->dk_version != bltn_version, LOAD_GLOBAL); - assert(DK_IS_UNICODE(bdict->ma_keys)); - PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(bdict->ma_keys); - res = entries[index].me_value; - DEOPT_IF(res == NULL, LOAD_GLOBAL); - Py_INCREF(res); - STAT_INC(LOAD_GLOBAL, hit); - null = NULL; - #line 2025 "Python/generated_cases.c.h" + PyObject *_tmp_1; + PyObject *_tmp_2; + { + } + { + uint16_t version = read_u16(&next_instr[1].cache); + #line 1408 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)GLOBALS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + #line 2031 "Python/generated_cases.c.h" + } + { + uint16_t version = read_u16(&next_instr[2].cache); + #line 1415 "Python/bytecodes.c" + PyDictObject *dict = (PyDictObject *)BUILTINS(); + DEOPT_IF(!PyDict_CheckExact(dict), LOAD_GLOBAL); + DEOPT_IF(dict->ma_keys->dk_version != version, LOAD_GLOBAL); + assert(DK_IS_UNICODE(dict->ma_keys)); + #line 2040 "Python/generated_cases.c.h" + } + { + PyObject *null = NULL; + PyObject *res; + uint16_t index = read_u16(&next_instr[3].cache); + #line 1432 "Python/bytecodes.c" + PyDictObject *bdict = (PyDictObject *)BUILTINS(); + PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(bdict->ma_keys); + res = entries[index].me_value; + DEOPT_IF(res == NULL, LOAD_GLOBAL); + Py_INCREF(res); + STAT_INC(LOAD_GLOBAL, hit); + null = NULL; + #line 2054 "Python/generated_cases.c.h" + if (oparg & 1) { _tmp_2 = null; } + _tmp_1 = res; + } + next_instr += 4; STACK_GROW(1); STACK_GROW(((oparg & 1) ? 1 : 0)); - stack_pointer[-1] = res; - if (oparg & 1) { stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))] = null; } - next_instr += 4; + stack_pointer[-1] = _tmp_1; + if (oparg & 1) { stack_pointer[-2] = _tmp_2; } DISPATCH(); } TARGET(DELETE_FAST) { - #line 1435 "Python/bytecodes.c" + #line 1446 "Python/bytecodes.c" PyObject *v = GETLOCAL(oparg); if (v == NULL) goto unbound_local_error; SETLOCAL(oparg, NULL); - #line 2039 "Python/generated_cases.c.h" + #line 2071 "Python/generated_cases.c.h" DISPATCH(); } TARGET(MAKE_CELL) { - #line 1441 "Python/bytecodes.c" + #line 1452 "Python/bytecodes.c" // "initial" is probably NULL but not if it's an arg (or set // via PyFrame_LocalsToFast() before MAKE_CELL has run). PyObject *initial = GETLOCAL(oparg); @@ -2049,12 +2081,12 @@ goto resume_with_error; } SETLOCAL(oparg, cell); - #line 2053 "Python/generated_cases.c.h" + #line 2085 "Python/generated_cases.c.h" DISPATCH(); } TARGET(DELETE_DEREF) { - #line 1452 "Python/bytecodes.c" + #line 1463 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); // Can't use ERROR_IF here. @@ -2065,14 +2097,14 @@ } PyCell_SET(cell, NULL); Py_DECREF(oldobj); - #line 2069 "Python/generated_cases.c.h" + #line 2101 "Python/generated_cases.c.h" DISPATCH(); } TARGET(LOAD_FROM_DICT_OR_DEREF) { PyObject *class_dict = stack_pointer[-1]; PyObject *value; - #line 1465 "Python/bytecodes.c" + #line 1476 "Python/bytecodes.c" PyObject *name; assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); @@ -2107,14 +2139,14 @@ } Py_INCREF(value); } - #line 2111 "Python/generated_cases.c.h" + #line 2143 "Python/generated_cases.c.h" stack_pointer[-1] = value; DISPATCH(); } TARGET(LOAD_DEREF) { PyObject *value; - #line 1502 "Python/bytecodes.c" + #line 1513 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); value = PyCell_GET(cell); if (value == NULL) { @@ -2122,7 +2154,7 @@ if (true) goto error; } Py_INCREF(value); - #line 2126 "Python/generated_cases.c.h" + #line 2158 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = value; DISPATCH(); @@ -2130,18 +2162,18 @@ TARGET(STORE_DEREF) { PyObject *v = stack_pointer[-1]; - #line 1512 "Python/bytecodes.c" + #line 1523 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); PyCell_SET(cell, v); Py_XDECREF(oldobj); - #line 2139 "Python/generated_cases.c.h" + #line 2171 "Python/generated_cases.c.h" STACK_SHRINK(1); DISPATCH(); } TARGET(COPY_FREE_VARS) { - #line 1519 "Python/bytecodes.c" + #line 1530 "Python/bytecodes.c" /* Copy closure variables to free variables */ PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyFunction_Check(frame->f_funcobj)); @@ -2152,22 +2184,22 @@ PyObject *o = PyTuple_GET_ITEM(closure, i); frame->localsplus[offset + i] = Py_NewRef(o); } - #line 2156 "Python/generated_cases.c.h" + #line 2188 "Python/generated_cases.c.h" DISPATCH(); } TARGET(BUILD_STRING) { PyObject **pieces = (stack_pointer - oparg); PyObject *str; - #line 1532 "Python/bytecodes.c" + #line 1543 "Python/bytecodes.c" str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg); - #line 2165 "Python/generated_cases.c.h" + #line 2197 "Python/generated_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(pieces[_i]); } - #line 1534 "Python/bytecodes.c" + #line 1545 "Python/bytecodes.c" if (str == NULL) { STACK_SHRINK(oparg); goto error; } - #line 2171 "Python/generated_cases.c.h" + #line 2203 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = str; @@ -2177,10 +2209,10 @@ TARGET(BUILD_TUPLE) { PyObject **values = (stack_pointer - oparg); PyObject *tup; - #line 1538 "Python/bytecodes.c" + #line 1549 "Python/bytecodes.c" tup = _PyTuple_FromArraySteal(values, oparg); if (tup == NULL) { STACK_SHRINK(oparg); goto error; } - #line 2184 "Python/generated_cases.c.h" + #line 2216 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = tup; @@ -2190,10 +2222,10 @@ TARGET(BUILD_LIST) { PyObject **values = (stack_pointer - oparg); PyObject *list; - #line 1543 "Python/bytecodes.c" + #line 1554 "Python/bytecodes.c" list = _PyList_FromArraySteal(values, oparg); if (list == NULL) { STACK_SHRINK(oparg); goto error; } - #line 2197 "Python/generated_cases.c.h" + #line 2229 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = list; @@ -2203,7 +2235,7 @@ TARGET(LIST_EXTEND) { PyObject *iterable = stack_pointer[-1]; PyObject *list = stack_pointer[-(2 + (oparg-1))]; - #line 1548 "Python/bytecodes.c" + #line 1559 "Python/bytecodes.c" PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); if (none_val == NULL) { if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) && @@ -2214,13 +2246,13 @@ "Value after * must be an iterable, not %.200s", Py_TYPE(iterable)->tp_name); } - #line 2218 "Python/generated_cases.c.h" + #line 2250 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 1559 "Python/bytecodes.c" + #line 1570 "Python/bytecodes.c" if (true) goto pop_1_error; } assert(Py_IsNone(none_val)); - #line 2224 "Python/generated_cases.c.h" + #line 2256 "Python/generated_cases.c.h" Py_DECREF(iterable); STACK_SHRINK(1); DISPATCH(); @@ -2229,13 +2261,13 @@ TARGET(SET_UPDATE) { PyObject *iterable = stack_pointer[-1]; PyObject *set = stack_pointer[-(2 + (oparg-1))]; - #line 1566 "Python/bytecodes.c" + #line 1577 "Python/bytecodes.c" int err = _PySet_Update(set, iterable); - #line 2235 "Python/generated_cases.c.h" + #line 2267 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 1568 "Python/bytecodes.c" + #line 1579 "Python/bytecodes.c" if (err < 0) goto pop_1_error; - #line 2239 "Python/generated_cases.c.h" + #line 2271 "Python/generated_cases.c.h" STACK_SHRINK(1); DISPATCH(); } @@ -2243,7 +2275,7 @@ TARGET(BUILD_SET) { PyObject **values = (stack_pointer - oparg); PyObject *set; - #line 1572 "Python/bytecodes.c" + #line 1583 "Python/bytecodes.c" set = PySet_New(NULL); if (set == NULL) goto error; @@ -2258,7 +2290,7 @@ Py_DECREF(set); if (true) { STACK_SHRINK(oparg); goto error; } } - #line 2262 "Python/generated_cases.c.h" + #line 2294 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_GROW(1); stack_pointer[-1] = set; @@ -2268,7 +2300,7 @@ TARGET(BUILD_MAP) { PyObject **values = (stack_pointer - oparg*2); PyObject *map; - #line 1589 "Python/bytecodes.c" + #line 1600 "Python/bytecodes.c" map = _PyDict_FromItems( values, 2, values+1, 2, @@ -2276,13 +2308,13 @@ if (map == NULL) goto error; - #line 2280 "Python/generated_cases.c.h" + #line 2312 "Python/generated_cases.c.h" for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } - #line 1597 "Python/bytecodes.c" + #line 1608 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg*2); goto error; } - #line 2286 "Python/generated_cases.c.h" + #line 2318 "Python/generated_cases.c.h" STACK_SHRINK(oparg*2); STACK_GROW(1); stack_pointer[-1] = map; @@ -2290,7 +2322,7 @@ } TARGET(SETUP_ANNOTATIONS) { - #line 1601 "Python/bytecodes.c" + #line 1612 "Python/bytecodes.c" int err; PyObject *ann_dict; if (LOCALS() == NULL) { @@ -2330,7 +2362,7 @@ Py_DECREF(ann_dict); } } - #line 2334 "Python/generated_cases.c.h" + #line 2366 "Python/generated_cases.c.h" DISPATCH(); } @@ -2338,7 +2370,7 @@ PyObject *keys = stack_pointer[-1]; PyObject **values = (stack_pointer - (1 + oparg)); PyObject *map; - #line 1643 "Python/bytecodes.c" + #line 1654 "Python/bytecodes.c" if (!PyTuple_CheckExact(keys) || PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { _PyErr_SetString(tstate, PyExc_SystemError, @@ -2348,14 +2380,14 @@ map = _PyDict_FromItems( &PyTuple_GET_ITEM(keys, 0), 1, values, 1, oparg); - #line 2352 "Python/generated_cases.c.h" + #line 2384 "Python/generated_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(values[_i]); } Py_DECREF(keys); - #line 1653 "Python/bytecodes.c" + #line 1664 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; } - #line 2359 "Python/generated_cases.c.h" + #line 2391 "Python/generated_cases.c.h" STACK_SHRINK(oparg); stack_pointer[-1] = map; DISPATCH(); @@ -2363,7 +2395,7 @@ TARGET(DICT_UPDATE) { PyObject *update = stack_pointer[-1]; - #line 1657 "Python/bytecodes.c" + #line 1668 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (PyDict_Update(dict, update) < 0) { if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) { @@ -2371,12 +2403,12 @@ "'%.200s' object is not a mapping", Py_TYPE(update)->tp_name); } - #line 2375 "Python/generated_cases.c.h" + #line 2407 "Python/generated_cases.c.h" Py_DECREF(update); - #line 1665 "Python/bytecodes.c" + #line 1676 "Python/bytecodes.c" if (true) goto pop_1_error; } - #line 2380 "Python/generated_cases.c.h" + #line 2412 "Python/generated_cases.c.h" Py_DECREF(update); STACK_SHRINK(1); DISPATCH(); @@ -2384,17 +2416,17 @@ TARGET(DICT_MERGE) { PyObject *update = stack_pointer[-1]; - #line 1671 "Python/bytecodes.c" + #line 1682 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (_PyDict_MergeEx(dict, update, 2) < 0) { format_kwargs_error(tstate, PEEK(3 + oparg), update); - #line 2393 "Python/generated_cases.c.h" + #line 2425 "Python/generated_cases.c.h" Py_DECREF(update); - #line 1676 "Python/bytecodes.c" + #line 1687 "Python/bytecodes.c" if (true) goto pop_1_error; } - #line 2398 "Python/generated_cases.c.h" + #line 2430 "Python/generated_cases.c.h" Py_DECREF(update); STACK_SHRINK(1); DISPATCH(); @@ -2403,25 +2435,25 @@ TARGET(MAP_ADD) { PyObject *value = stack_pointer[-1]; PyObject *key = stack_pointer[-2]; - #line 1682 "Python/bytecodes.c" + #line 1693 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack assert(PyDict_CheckExact(dict)); /* dict[key] = value */ // Do not DECREF INPUTS because the function steals the references if (_PyDict_SetItem_Take2((PyDictObject *)dict, key, value) != 0) goto pop_2_error; - #line 2413 "Python/generated_cases.c.h" + #line 2445 "Python/generated_cases.c.h" STACK_SHRINK(2); DISPATCH(); } TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) { - #line 1690 "Python/bytecodes.c" + #line 1701 "Python/bytecodes.c" _PySuperAttrCache *cache = (_PySuperAttrCache *)next_instr; // cancel out the decrement that will happen in LOAD_SUPER_ATTR; we // don't want to specialize instrumented instructions INCREMENT_ADAPTIVE_COUNTER(cache->counter); GO_TO_INSTRUCTION(LOAD_SUPER_ATTR); - #line 2425 "Python/generated_cases.c.h" + #line 2457 "Python/generated_cases.c.h" } TARGET(LOAD_SUPER_ATTR) { @@ -2432,7 +2464,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1704 "Python/bytecodes.c" + #line 1715 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); int load_method = oparg & 1; #if ENABLE_SPECIALIZATION @@ -2474,16 +2506,16 @@ } } } - #line 2478 "Python/generated_cases.c.h" + #line 2510 "Python/generated_cases.c.h" Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1746 "Python/bytecodes.c" + #line 1757 "Python/bytecodes.c" if (super == NULL) goto pop_3_error; res = PyObject_GetAttr(super, name); Py_DECREF(super); if (res == NULL) goto pop_3_error; - #line 2487 "Python/generated_cases.c.h" + #line 2519 "Python/generated_cases.c.h" STACK_SHRINK(2); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2498,20 +2530,20 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1765 "Python/bytecodes.c" + #line 1776 "Python/bytecodes.c" assert(!(oparg & 1)); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); STAT_INC(LOAD_SUPER_ATTR, hit); PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); res = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL); - #line 2509 "Python/generated_cases.c.h" + #line 2541 "Python/generated_cases.c.h" Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1772 "Python/bytecodes.c" + #line 1783 "Python/bytecodes.c" if (res == NULL) goto pop_3_error; - #line 2515 "Python/generated_cases.c.h" + #line 2547 "Python/generated_cases.c.h" STACK_SHRINK(2); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2526,7 +2558,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2; PyObject *res; - #line 1776 "Python/bytecodes.c" + #line 1787 "Python/bytecodes.c" assert(oparg & 1); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -2549,7 +2581,7 @@ res = res2; res2 = NULL; } - #line 2553 "Python/generated_cases.c.h" + #line 2585 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; stack_pointer[-2] = res2; @@ -2563,7 +2595,7 @@ PyObject *owner = stack_pointer[-1]; PyObject *res2 = NULL; PyObject *res; - #line 1817 "Python/bytecodes.c" + #line 1828 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyAttrCache *cache = (_PyAttrCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2597,9 +2629,9 @@ NULL | meth | arg1 | ... | argN */ - #line 2601 "Python/generated_cases.c.h" + #line 2633 "Python/generated_cases.c.h" Py_DECREF(owner); - #line 1851 "Python/bytecodes.c" + #line 1862 "Python/bytecodes.c" if (meth == NULL) goto pop_1_error; res2 = NULL; res = meth; @@ -2608,12 +2640,12 @@ else { /* Classic, pushes one value. */ res = PyObject_GetAttr(owner, name); - #line 2612 "Python/generated_cases.c.h" + #line 2644 "Python/generated_cases.c.h" Py_DECREF(owner); - #line 1860 "Python/bytecodes.c" + #line 1871 "Python/bytecodes.c" if (res == NULL) goto pop_1_error; } - #line 2617 "Python/generated_cases.c.h" + #line 2649 "Python/generated_cases.c.h" STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; if (oparg & 1) { stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))] = res2; } @@ -2627,7 +2659,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1869 "Python/bytecodes.c" + #line 1880 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2640,7 +2672,7 @@ STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); res2 = NULL; - #line 2644 "Python/generated_cases.c.h" + #line 2676 "Python/generated_cases.c.h" Py_DECREF(owner); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2655,7 +2687,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1885 "Python/bytecodes.c" + #line 1896 "Python/bytecodes.c" DEOPT_IF(!PyModule_CheckExact(owner), LOAD_ATTR); PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner)->md_dict; assert(dict != NULL); @@ -2668,7 +2700,7 @@ STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); res2 = NULL; - #line 2672 "Python/generated_cases.c.h" + #line 2704 "Python/generated_cases.c.h" Py_DECREF(owner); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2683,7 +2715,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1901 "Python/bytecodes.c" + #line 1912 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2710,7 +2742,7 @@ STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); res2 = NULL; - #line 2714 "Python/generated_cases.c.h" + #line 2746 "Python/generated_cases.c.h" Py_DECREF(owner); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2725,7 +2757,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1931 "Python/bytecodes.c" + #line 1942 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2735,7 +2767,7 @@ STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); res2 = NULL; - #line 2739 "Python/generated_cases.c.h" + #line 2771 "Python/generated_cases.c.h" Py_DECREF(owner); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2750,7 +2782,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 1944 "Python/bytecodes.c" + #line 1955 "Python/bytecodes.c" DEOPT_IF(!PyType_Check(cls), LOAD_ATTR); DEOPT_IF(((PyTypeObject *)cls)->tp_version_tag != type_version, @@ -2762,7 +2794,7 @@ res = descr; assert(res != NULL); Py_INCREF(res); - #line 2766 "Python/generated_cases.c.h" + #line 2798 "Python/generated_cases.c.h" Py_DECREF(cls); STACK_GROW(((oparg & 1) ? 1 : 0)); stack_pointer[-1] = res; @@ -2776,7 +2808,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t func_version = read_u32(&next_instr[3].cache); PyObject *fget = read_obj(&next_instr[5].cache); - #line 1959 "Python/bytecodes.c" + #line 1970 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR); PyTypeObject *cls = Py_TYPE(owner); @@ -2800,7 +2832,7 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_LOAD_ATTR); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - #line 2804 "Python/generated_cases.c.h" + #line 2836 "Python/generated_cases.c.h" } TARGET(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN) { @@ -2808,7 +2840,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t func_version = read_u32(&next_instr[3].cache); PyObject *getattribute = read_obj(&next_instr[5].cache); - #line 1985 "Python/bytecodes.c" + #line 1996 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR); PyTypeObject *cls = Py_TYPE(owner); DEOPT_IF(cls->tp_version_tag != type_version, LOAD_ATTR); @@ -2834,7 +2866,7 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_LOAD_ATTR); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - #line 2838 "Python/generated_cases.c.h" + #line 2870 "Python/generated_cases.c.h" } TARGET(STORE_ATTR_INSTANCE_VALUE) { @@ -2842,7 +2874,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 2013 "Python/bytecodes.c" + #line 2024 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2860,7 +2892,7 @@ Py_DECREF(old_value); } Py_DECREF(owner); - #line 2864 "Python/generated_cases.c.h" + #line 2896 "Python/generated_cases.c.h" STACK_SHRINK(2); next_instr += 4; DISPATCH(); @@ -2871,7 +2903,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t hint = read_u16(&next_instr[3].cache); - #line 2033 "Python/bytecodes.c" + #line 2044 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2910,7 +2942,7 @@ /* PEP 509 */ dict->ma_version_tag = new_version; Py_DECREF(owner); - #line 2914 "Python/generated_cases.c.h" + #line 2946 "Python/generated_cases.c.h" STACK_SHRINK(2); next_instr += 4; DISPATCH(); @@ -2921,7 +2953,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 2074 "Python/bytecodes.c" + #line 2085 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2931,7 +2963,7 @@ *(PyObject **)addr = value; Py_XDECREF(old_value); Py_DECREF(owner); - #line 2935 "Python/generated_cases.c.h" + #line 2967 "Python/generated_cases.c.h" STACK_SHRINK(2); next_instr += 4; DISPATCH(); @@ -2943,7 +2975,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2093 "Python/bytecodes.c" + #line 2104 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyCompareOpCache *cache = (_PyCompareOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2956,10 +2988,10 @@ #endif /* ENABLE_SPECIALIZATION */ assert((oparg >> 5) <= Py_GE); res = PyObject_RichCompare(left, right, oparg >> 5); - #line 2960 "Python/generated_cases.c.h" + #line 2992 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2106 "Python/bytecodes.c" + #line 2117 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; if (oparg & 16) { int res_bool = PyObject_IsTrue(res); @@ -2967,7 +2999,7 @@ if (res_bool < 0) goto pop_2_error; res = res_bool ? Py_True : Py_False; } - #line 2971 "Python/generated_cases.c.h" + #line 3003 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; next_instr += 1; @@ -2978,7 +3010,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2116 "Python/bytecodes.c" + #line 2127 "Python/bytecodes.c" DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -2990,7 +3022,7 @@ _Py_DECREF_SPECIALIZED(right, _PyFloat_ExactDealloc); res = (sign_ish & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 2994 "Python/generated_cases.c.h" + #line 3026 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; next_instr += 1; @@ -3001,7 +3033,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2131 "Python/bytecodes.c" + #line 2142 "Python/bytecodes.c" DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP); DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP); @@ -3017,7 +3049,7 @@ _Py_DECREF_SPECIALIZED(right, (destructor)PyObject_Free); res = (sign_ish & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 3021 "Python/generated_cases.c.h" + #line 3053 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; next_instr += 1; @@ -3028,7 +3060,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2150 "Python/bytecodes.c" + #line 2161 "Python/bytecodes.c" DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -3041,7 +3073,7 @@ assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS); res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? Py_True : Py_False; // It's always a bool, so we don't care about oparg & 16. - #line 3045 "Python/generated_cases.c.h" + #line 3077 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; next_instr += 1; @@ -3052,14 +3084,14 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2165 "Python/bytecodes.c" + #line 2176 "Python/bytecodes.c" int res = Py_Is(left, right) ^ oparg; - #line 3058 "Python/generated_cases.c.h" + #line 3090 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2167 "Python/bytecodes.c" + #line 2178 "Python/bytecodes.c" b = res ? Py_True : Py_False; - #line 3063 "Python/generated_cases.c.h" + #line 3095 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = b; DISPATCH(); @@ -3069,15 +3101,15 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2171 "Python/bytecodes.c" + #line 2182 "Python/bytecodes.c" int res = PySequence_Contains(right, left); - #line 3075 "Python/generated_cases.c.h" + #line 3107 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2173 "Python/bytecodes.c" + #line 2184 "Python/bytecodes.c" if (res < 0) goto pop_2_error; b = (res ^ oparg) ? Py_True : Py_False; - #line 3081 "Python/generated_cases.c.h" + #line 3113 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = b; DISPATCH(); @@ -3088,12 +3120,12 @@ PyObject *exc_value = stack_pointer[-2]; PyObject *rest; PyObject *match; - #line 2178 "Python/bytecodes.c" + #line 2189 "Python/bytecodes.c" if (check_except_star_type_valid(tstate, match_type) < 0) { - #line 3094 "Python/generated_cases.c.h" + #line 3126 "Python/generated_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2180 "Python/bytecodes.c" + #line 2191 "Python/bytecodes.c" if (true) goto pop_2_error; } @@ -3101,10 +3133,10 @@ rest = NULL; int res = exception_group_match(exc_value, match_type, &match, &rest); - #line 3105 "Python/generated_cases.c.h" + #line 3137 "Python/generated_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2188 "Python/bytecodes.c" + #line 2199 "Python/bytecodes.c" if (res < 0) goto pop_2_error; assert((match == NULL) == (rest == NULL)); @@ -3113,7 +3145,7 @@ if (!Py_IsNone(match)) { PyErr_SetHandledException(match); } - #line 3117 "Python/generated_cases.c.h" + #line 3149 "Python/generated_cases.c.h" stack_pointer[-1] = match; stack_pointer[-2] = rest; DISPATCH(); @@ -3123,21 +3155,21 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2199 "Python/bytecodes.c" + #line 2210 "Python/bytecodes.c" assert(PyExceptionInstance_Check(left)); if (check_except_type_valid(tstate, right) < 0) { - #line 3130 "Python/generated_cases.c.h" + #line 3162 "Python/generated_cases.c.h" Py_DECREF(right); - #line 2202 "Python/bytecodes.c" + #line 2213 "Python/bytecodes.c" if (true) goto pop_1_error; } int res = PyErr_GivenExceptionMatches(left, right); - #line 3137 "Python/generated_cases.c.h" + #line 3169 "Python/generated_cases.c.h" Py_DECREF(right); - #line 2207 "Python/bytecodes.c" + #line 2218 "Python/bytecodes.c" b = res ? Py_True : Py_False; - #line 3141 "Python/generated_cases.c.h" + #line 3173 "Python/generated_cases.c.h" stack_pointer[-1] = b; DISPATCH(); } @@ -3146,15 +3178,15 @@ PyObject *fromlist = stack_pointer[-1]; PyObject *level = stack_pointer[-2]; PyObject *res; - #line 2211 "Python/bytecodes.c" + #line 2222 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); res = import_name(tstate, frame, name, fromlist, level); - #line 3153 "Python/generated_cases.c.h" + #line 3185 "Python/generated_cases.c.h" Py_DECREF(level); Py_DECREF(fromlist); - #line 2214 "Python/bytecodes.c" + #line 2225 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; - #line 3158 "Python/generated_cases.c.h" + #line 3190 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; DISPATCH(); @@ -3163,25 +3195,25 @@ TARGET(IMPORT_FROM) { PyObject *from = stack_pointer[-1]; PyObject *res; - #line 2218 "Python/bytecodes.c" + #line 2229 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); res = import_from(tstate, from, name); if (res == NULL) goto error; - #line 3171 "Python/generated_cases.c.h" + #line 3203 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; DISPATCH(); } TARGET(JUMP_FORWARD) { - #line 2224 "Python/bytecodes.c" + #line 2235 "Python/bytecodes.c" JUMPBY(oparg); - #line 3180 "Python/generated_cases.c.h" + #line 3212 "Python/generated_cases.c.h" DISPATCH(); } TARGET(JUMP_BACKWARD) { - #line 2228 "Python/bytecodes.c" + #line 2239 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); _Py_CODEUNIT *here = next_instr - 1; assert(oparg <= INSTR_OFFSET()); @@ -3200,12 +3232,12 @@ goto resume_frame; } #endif /* ENABLE_SPECIALIZATION */ - #line 3204 "Python/generated_cases.c.h" + #line 3236 "Python/generated_cases.c.h" DISPATCH(); } TARGET(ENTER_EXECUTOR) { - #line 2259 "Python/bytecodes.c" + #line 2270 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); PyCodeObject *code = _PyFrame_GetCode(frame); @@ -3220,25 +3252,25 @@ goto resume_with_error; } goto resume_frame; - #line 3224 "Python/generated_cases.c.h" + #line 3256 "Python/generated_cases.c.h" } TARGET(POP_JUMP_IF_FALSE) { PyObject *cond = stack_pointer[-1]; - #line 2276 "Python/bytecodes.c" + #line 2287 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsFalse(cond)); - #line 3232 "Python/generated_cases.c.h" + #line 3264 "Python/generated_cases.c.h" STACK_SHRINK(1); DISPATCH(); } TARGET(POP_JUMP_IF_TRUE) { PyObject *cond = stack_pointer[-1]; - #line 2281 "Python/bytecodes.c" + #line 2292 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsTrue(cond)); - #line 3242 "Python/generated_cases.c.h" + #line 3274 "Python/generated_cases.c.h" STACK_SHRINK(1); DISPATCH(); } @@ -3248,25 +3280,25 @@ { PyObject *value = _tmp_1; PyObject *b; - #line 2286 "Python/bytecodes.c" + #line 2297 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } else { b = Py_False; - #line 3258 "Python/generated_cases.c.h" + #line 3290 "Python/generated_cases.c.h" Py_DECREF(value); - #line 2292 "Python/bytecodes.c" + #line 2303 "Python/bytecodes.c" } - #line 3262 "Python/generated_cases.c.h" + #line 3294 "Python/generated_cases.c.h" _tmp_1 = b; } { PyObject *cond = _tmp_1; - #line 2281 "Python/bytecodes.c" + #line 2292 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsTrue(cond)); - #line 3270 "Python/generated_cases.c.h" + #line 3302 "Python/generated_cases.c.h" } STACK_SHRINK(1); DISPATCH(); @@ -3277,52 +3309,52 @@ { PyObject *value = _tmp_1; PyObject *b; - #line 2286 "Python/bytecodes.c" + #line 2297 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } else { b = Py_False; - #line 3287 "Python/generated_cases.c.h" + #line 3319 "Python/generated_cases.c.h" Py_DECREF(value); - #line 2292 "Python/bytecodes.c" + #line 2303 "Python/bytecodes.c" } - #line 3291 "Python/generated_cases.c.h" + #line 3323 "Python/generated_cases.c.h" _tmp_1 = b; } { PyObject *cond = _tmp_1; - #line 2276 "Python/bytecodes.c" + #line 2287 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsFalse(cond)); - #line 3299 "Python/generated_cases.c.h" + #line 3331 "Python/generated_cases.c.h" } STACK_SHRINK(1); DISPATCH(); } TARGET(JUMP_BACKWARD_NO_INTERRUPT) { - #line 2300 "Python/bytecodes.c" + #line 2311 "Python/bytecodes.c" /* This bytecode is used in the `yield from` or `await` loop. * If there is an interrupt, we want it handled in the innermost * generator or coroutine, so we deliberately do not check it here. * (see bpo-30039). */ JUMPBY(-oparg); - #line 3313 "Python/generated_cases.c.h" + #line 3345 "Python/generated_cases.c.h" DISPATCH(); } TARGET(GET_LEN) { PyObject *obj = stack_pointer[-1]; PyObject *len_o; - #line 2309 "Python/bytecodes.c" + #line 2320 "Python/bytecodes.c" // PUSH(len(TOS)) Py_ssize_t len_i = PyObject_Length(obj); if (len_i < 0) goto error; len_o = PyLong_FromSsize_t(len_i); if (len_o == NULL) goto error; - #line 3326 "Python/generated_cases.c.h" + #line 3358 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = len_o; DISPATCH(); @@ -3333,16 +3365,16 @@ PyObject *type = stack_pointer[-2]; PyObject *subject = stack_pointer[-3]; PyObject *attrs; - #line 2317 "Python/bytecodes.c" + #line 2328 "Python/bytecodes.c" // Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or // None on failure. assert(PyTuple_CheckExact(names)); attrs = match_class(tstate, subject, type, oparg, names); - #line 3342 "Python/generated_cases.c.h" + #line 3374 "Python/generated_cases.c.h" Py_DECREF(subject); Py_DECREF(type); Py_DECREF(names); - #line 2322 "Python/bytecodes.c" + #line 2333 "Python/bytecodes.c" if (attrs) { assert(PyTuple_CheckExact(attrs)); // Success! } @@ -3350,7 +3382,7 @@ if (_PyErr_Occurred(tstate)) goto pop_3_error; attrs = Py_None; // Failure! } - #line 3354 "Python/generated_cases.c.h" + #line 3386 "Python/generated_cases.c.h" STACK_SHRINK(2); stack_pointer[-1] = attrs; DISPATCH(); @@ -3359,10 +3391,10 @@ TARGET(MATCH_MAPPING) { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2332 "Python/bytecodes.c" + #line 2343 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? Py_True : Py_False; - #line 3366 "Python/generated_cases.c.h" + #line 3398 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; DISPATCH(); @@ -3371,10 +3403,10 @@ TARGET(MATCH_SEQUENCE) { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2337 "Python/bytecodes.c" + #line 2348 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? Py_True : Py_False; - #line 3378 "Python/generated_cases.c.h" + #line 3410 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; DISPATCH(); @@ -3384,11 +3416,11 @@ PyObject *keys = stack_pointer[-1]; PyObject *subject = stack_pointer[-2]; PyObject *values_or_none; - #line 2342 "Python/bytecodes.c" + #line 2353 "Python/bytecodes.c" // On successful match, PUSH(values). Otherwise, PUSH(None). values_or_none = match_keys(tstate, subject, keys); if (values_or_none == NULL) goto error; - #line 3392 "Python/generated_cases.c.h" + #line 3424 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = values_or_none; DISPATCH(); @@ -3397,14 +3429,14 @@ TARGET(GET_ITER) { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2348 "Python/bytecodes.c" + #line 2359 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ iter = PyObject_GetIter(iterable); - #line 3404 "Python/generated_cases.c.h" + #line 3436 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 2351 "Python/bytecodes.c" + #line 2362 "Python/bytecodes.c" if (iter == NULL) goto pop_1_error; - #line 3408 "Python/generated_cases.c.h" + #line 3440 "Python/generated_cases.c.h" stack_pointer[-1] = iter; DISPATCH(); } @@ -3412,7 +3444,7 @@ TARGET(GET_YIELD_FROM_ITER) { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2355 "Python/bytecodes.c" + #line 2366 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ if (PyCoro_CheckExact(iterable)) { /* `iterable` is a coroutine */ @@ -3435,11 +3467,11 @@ if (iter == NULL) { goto error; } - #line 3439 "Python/generated_cases.c.h" + #line 3471 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 2378 "Python/bytecodes.c" + #line 2389 "Python/bytecodes.c" } - #line 3443 "Python/generated_cases.c.h" + #line 3475 "Python/generated_cases.c.h" stack_pointer[-1] = iter; DISPATCH(); } @@ -3449,7 +3481,7 @@ static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size"); PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2396 "Python/bytecodes.c" + #line 2407 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyForIterCache *cache = (_PyForIterCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -3481,7 +3513,7 @@ DISPATCH(); } // Common case: no jump, leave it to the code generator - #line 3485 "Python/generated_cases.c.h" + #line 3517 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = next; next_instr += 1; @@ -3489,7 +3521,7 @@ } TARGET(INSTRUMENTED_FOR_ITER) { - #line 2430 "Python/bytecodes.c" + #line 2441 "Python/bytecodes.c" _Py_CODEUNIT *here = next_instr-1; _Py_CODEUNIT *target; PyObject *iter = TOP(); @@ -3515,14 +3547,14 @@ target = next_instr + INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1; } INSTRUMENTED_JUMP(here, target, PY_MONITORING_EVENT_BRANCH); - #line 3519 "Python/generated_cases.c.h" + #line 3551 "Python/generated_cases.c.h" DISPATCH(); } TARGET(FOR_ITER_LIST) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2458 "Python/bytecodes.c" + #line 2469 "Python/bytecodes.c" DEOPT_IF(Py_TYPE(iter) != &PyListIter_Type, FOR_ITER); _PyListIterObject *it = (_PyListIterObject *)iter; STAT_INC(FOR_ITER, hit); @@ -3543,7 +3575,7 @@ DISPATCH(); end_for_iter_list: // Common case: no jump, leave it to the code generator - #line 3547 "Python/generated_cases.c.h" + #line 3579 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = next; next_instr += 1; @@ -3553,7 +3585,7 @@ TARGET(FOR_ITER_TUPLE) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2481 "Python/bytecodes.c" + #line 2492 "Python/bytecodes.c" _PyTupleIterObject *it = (_PyTupleIterObject *)iter; DEOPT_IF(Py_TYPE(it) != &PyTupleIter_Type, FOR_ITER); STAT_INC(FOR_ITER, hit); @@ -3574,7 +3606,7 @@ DISPATCH(); end_for_iter_tuple: // Common case: no jump, leave it to the code generator - #line 3578 "Python/generated_cases.c.h" + #line 3610 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = next; next_instr += 1; @@ -3584,7 +3616,7 @@ TARGET(FOR_ITER_RANGE) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2504 "Python/bytecodes.c" + #line 2515 "Python/bytecodes.c" _PyRangeIterObject *r = (_PyRangeIterObject *)iter; DEOPT_IF(Py_TYPE(r) != &PyRangeIter_Type, FOR_ITER); STAT_INC(FOR_ITER, hit); @@ -3603,7 +3635,7 @@ if (next == NULL) { goto error; } - #line 3607 "Python/generated_cases.c.h" + #line 3639 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = next; next_instr += 1; @@ -3612,7 +3644,7 @@ TARGET(FOR_ITER_GEN) { PyObject *iter = stack_pointer[-1]; - #line 2525 "Python/bytecodes.c" + #line 2536 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, FOR_ITER); PyGenObject *gen = (PyGenObject *)iter; DEOPT_IF(Py_TYPE(gen) != &PyGen_Type, FOR_ITER); @@ -3628,14 +3660,14 @@ assert(next_instr[oparg].op.code == END_FOR || next_instr[oparg].op.code == INSTRUMENTED_END_FOR); DISPATCH_INLINED(gen_frame); - #line 3632 "Python/generated_cases.c.h" + #line 3664 "Python/generated_cases.c.h" } TARGET(BEFORE_ASYNC_WITH) { PyObject *mgr = stack_pointer[-1]; PyObject *exit; PyObject *res; - #line 2543 "Python/bytecodes.c" + #line 2554 "Python/bytecodes.c" PyObject *enter = _PyObject_LookupSpecial(mgr, &_Py_ID(__aenter__)); if (enter == NULL) { if (!_PyErr_Occurred(tstate)) { @@ -3658,16 +3690,16 @@ Py_DECREF(enter); goto error; } - #line 3662 "Python/generated_cases.c.h" + #line 3694 "Python/generated_cases.c.h" Py_DECREF(mgr); - #line 2566 "Python/bytecodes.c" + #line 2577 "Python/bytecodes.c" res = _PyObject_CallNoArgs(enter); Py_DECREF(enter); if (res == NULL) { Py_DECREF(exit); if (true) goto pop_1_error; } - #line 3671 "Python/generated_cases.c.h" + #line 3703 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; stack_pointer[-2] = exit; @@ -3678,7 +3710,7 @@ PyObject *mgr = stack_pointer[-1]; PyObject *exit; PyObject *res; - #line 2575 "Python/bytecodes.c" + #line 2586 "Python/bytecodes.c" /* pop the context manager, push its __exit__ and the * value returned from calling its __enter__ */ @@ -3704,16 +3736,16 @@ Py_DECREF(enter); goto error; } - #line 3708 "Python/generated_cases.c.h" + #line 3740 "Python/generated_cases.c.h" Py_DECREF(mgr); - #line 2601 "Python/bytecodes.c" + #line 2612 "Python/bytecodes.c" res = _PyObject_CallNoArgs(enter); Py_DECREF(enter); if (res == NULL) { Py_DECREF(exit); if (true) goto pop_1_error; } - #line 3717 "Python/generated_cases.c.h" + #line 3749 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; stack_pointer[-2] = exit; @@ -3725,7 +3757,7 @@ PyObject *lasti = stack_pointer[-3]; PyObject *exit_func = stack_pointer[-4]; PyObject *res; - #line 2610 "Python/bytecodes.c" + #line 2621 "Python/bytecodes.c" /* At the top of the stack are 4 values: - val: TOP = exc_info() - unused: SECOND = previous exception @@ -3746,7 +3778,7 @@ res = PyObject_Vectorcall(exit_func, stack + 1, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); if (res == NULL) goto error; - #line 3750 "Python/generated_cases.c.h" + #line 3782 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = res; DISPATCH(); @@ -3755,7 +3787,7 @@ TARGET(PUSH_EXC_INFO) { PyObject *new_exc = stack_pointer[-1]; PyObject *prev_exc; - #line 2649 "Python/bytecodes.c" + #line 2660 "Python/bytecodes.c" _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = exc_info->exc_value; @@ -3765,7 +3797,7 @@ } assert(PyExceptionInstance_Check(new_exc)); exc_info->exc_value = Py_NewRef(new_exc); - #line 3769 "Python/generated_cases.c.h" + #line 3801 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = new_exc; stack_pointer[-2] = prev_exc; @@ -3779,7 +3811,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t keys_version = read_u32(&next_instr[3].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2661 "Python/bytecodes.c" + #line 2672 "Python/bytecodes.c" assert(oparg & 1); /* Cached method object */ PyTypeObject *self_cls = Py_TYPE(self); @@ -3796,7 +3828,7 @@ res2 = Py_NewRef(descr); assert(_PyType_HasFeature(Py_TYPE(res2), Py_TPFLAGS_METHOD_DESCRIPTOR)); res = self; - #line 3800 "Python/generated_cases.c.h" + #line 3832 "Python/generated_cases.c.h" STACK_GROW((1 ? 1 : 0)); stack_pointer[-1] = res; if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } @@ -3810,7 +3842,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2680 "Python/bytecodes.c" + #line 2691 "Python/bytecodes.c" assert(oparg & 1); PyTypeObject *self_cls = Py_TYPE(self); DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR); @@ -3820,7 +3852,7 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); res2 = Py_NewRef(descr); res = self; - #line 3824 "Python/generated_cases.c.h" + #line 3856 "Python/generated_cases.c.h" STACK_GROW((1 ? 1 : 0)); stack_pointer[-1] = res; if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } @@ -3835,7 +3867,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t keys_version = read_u32(&next_instr[3].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2692 "Python/bytecodes.c" + #line 2703 "Python/bytecodes.c" assert((oparg & 1) == 0); PyTypeObject *self_cls = Py_TYPE(self); assert(type_version != 0); @@ -3848,11 +3880,11 @@ keys_version, LOAD_ATTR); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - #line 3852 "Python/generated_cases.c.h" + #line 3884 "Python/generated_cases.c.h" Py_DECREF(self); - #line 2705 "Python/bytecodes.c" + #line 2716 "Python/bytecodes.c" res = Py_NewRef(descr); - #line 3856 "Python/generated_cases.c.h" + #line 3888 "Python/generated_cases.c.h" STACK_GROW((0 ? 1 : 0)); stack_pointer[-1] = res; if (0) { stack_pointer[-(1 + (0 ? 1 : 0))] = res2; } @@ -3866,7 +3898,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2709 "Python/bytecodes.c" + #line 2720 "Python/bytecodes.c" assert((oparg & 1) == 0); PyTypeObject *self_cls = Py_TYPE(self); assert(type_version != 0); @@ -3874,11 +3906,11 @@ assert(self_cls->tp_dictoffset == 0); STAT_INC(LOAD_ATTR, hit); assert(descr != NULL); - #line 3878 "Python/generated_cases.c.h" + #line 3910 "Python/generated_cases.c.h" Py_DECREF(self); - #line 2717 "Python/bytecodes.c" + #line 2728 "Python/bytecodes.c" res = Py_NewRef(descr); - #line 3882 "Python/generated_cases.c.h" + #line 3914 "Python/generated_cases.c.h" STACK_GROW((0 ? 1 : 0)); stack_pointer[-1] = res; if (0) { stack_pointer[-(1 + (0 ? 1 : 0))] = res2; } @@ -3892,7 +3924,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2721 "Python/bytecodes.c" + #line 2732 "Python/bytecodes.c" assert(oparg & 1); PyTypeObject *self_cls = Py_TYPE(self); DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR); @@ -3906,7 +3938,7 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); res2 = Py_NewRef(descr); res = self; - #line 3910 "Python/generated_cases.c.h" + #line 3942 "Python/generated_cases.c.h" STACK_GROW((1 ? 1 : 0)); stack_pointer[-1] = res; if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } @@ -3915,16 +3947,16 @@ } TARGET(KW_NAMES) { - #line 2737 "Python/bytecodes.c" + #line 2748 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg < PyTuple_GET_SIZE(FRAME_CO_CONSTS)); kwnames = GETITEM(FRAME_CO_CONSTS, oparg); - #line 3923 "Python/generated_cases.c.h" + #line 3955 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_CALL) { - #line 2743 "Python/bytecodes.c" + #line 2754 "Python/bytecodes.c" int is_meth = PEEK(oparg+2) != NULL; int total_args = oparg + is_meth; PyObject *function = PEEK(total_args + 1); @@ -3937,7 +3969,7 @@ _PyCallCache *cache = (_PyCallCache *)next_instr; INCREMENT_ADAPTIVE_COUNTER(cache->counter); GO_TO_INSTRUCTION(CALL); - #line 3941 "Python/generated_cases.c.h" + #line 3973 "Python/generated_cases.c.h" } TARGET(CALL) { @@ -3947,7 +3979,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2789 "Python/bytecodes.c" + #line 2800 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -4029,7 +4061,7 @@ Py_DECREF(args[i]); } if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4033 "Python/generated_cases.c.h" + #line 4065 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4041,7 +4073,7 @@ TARGET(CALL_BOUND_METHOD_EXACT_ARGS) { PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; - #line 2877 "Python/bytecodes.c" + #line 2888 "Python/bytecodes.c" DEOPT_IF(method != NULL, CALL); DEOPT_IF(Py_TYPE(callable) != &PyMethod_Type, CALL); STAT_INC(CALL, hit); @@ -4051,7 +4083,7 @@ PEEK(oparg + 2) = Py_NewRef(meth); // method Py_DECREF(callable); GO_TO_INSTRUCTION(CALL_PY_EXACT_ARGS); - #line 4055 "Python/generated_cases.c.h" + #line 4087 "Python/generated_cases.c.h" } TARGET(CALL_PY_EXACT_ARGS) { @@ -4060,7 +4092,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; uint32_t func_version = read_u32(&next_instr[1].cache); - #line 2889 "Python/bytecodes.c" + #line 2900 "Python/bytecodes.c" assert(kwnames == NULL); DEOPT_IF(tstate->interp->eval_frame, CALL); int is_meth = method != NULL; @@ -4086,7 +4118,7 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_CALL); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - #line 4090 "Python/generated_cases.c.h" + #line 4122 "Python/generated_cases.c.h" } TARGET(CALL_PY_WITH_DEFAULTS) { @@ -4094,7 +4126,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; uint32_t func_version = read_u32(&next_instr[1].cache); - #line 2917 "Python/bytecodes.c" + #line 2928 "Python/bytecodes.c" assert(kwnames == NULL); DEOPT_IF(tstate->interp->eval_frame, CALL); int is_meth = method != NULL; @@ -4130,7 +4162,7 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_CALL); frame->return_offset = 0; DISPATCH_INLINED(new_frame); - #line 4134 "Python/generated_cases.c.h" + #line 4166 "Python/generated_cases.c.h" } TARGET(CALL_NO_KW_TYPE_1) { @@ -4138,7 +4170,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2955 "Python/bytecodes.c" + #line 2966 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4148,7 +4180,7 @@ res = Py_NewRef(Py_TYPE(obj)); Py_DECREF(obj); Py_DECREF(&PyType_Type); // I.e., callable - #line 4152 "Python/generated_cases.c.h" + #line 4184 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4161,7 +4193,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2967 "Python/bytecodes.c" + #line 2978 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4172,7 +4204,7 @@ Py_DECREF(arg); Py_DECREF(&PyUnicode_Type); // I.e., callable if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4176 "Python/generated_cases.c.h" + #line 4208 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4186,7 +4218,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2981 "Python/bytecodes.c" + #line 2992 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4197,7 +4229,7 @@ Py_DECREF(arg); Py_DECREF(&PyTuple_Type); // I.e., tuple if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4201 "Python/generated_cases.c.h" + #line 4233 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4210,7 +4242,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; - #line 2995 "Python/bytecodes.c" + #line 3006 "Python/bytecodes.c" /* This instruction does the following: * 1. Creates the object (by calling ``object.__new__``) * 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``) @@ -4261,12 +4293,12 @@ * as it will be checked after start_frame */ tstate->py_recursion_remaining--; goto start_frame; - #line 4265 "Python/generated_cases.c.h" + #line 4297 "Python/generated_cases.c.h" } TARGET(EXIT_INIT_CHECK) { PyObject *should_be_none = stack_pointer[-1]; - #line 3048 "Python/bytecodes.c" + #line 3059 "Python/bytecodes.c" assert(STACK_LEVEL() == 2); if (should_be_none != Py_None) { PyErr_Format(PyExc_TypeError, @@ -4274,7 +4306,7 @@ Py_TYPE(should_be_none)->tp_name); goto error; } - #line 4278 "Python/generated_cases.c.h" + #line 4310 "Python/generated_cases.c.h" STACK_SHRINK(1); DISPATCH(); } @@ -4284,7 +4316,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3058 "Python/bytecodes.c" + #line 3069 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -4306,7 +4338,7 @@ } Py_DECREF(tp); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4310 "Python/generated_cases.c.h" + #line 4342 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4320,7 +4352,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3083 "Python/bytecodes.c" + #line 3094 "Python/bytecodes.c" /* Builtin METH_O functions */ assert(kwnames == NULL); int is_meth = method != NULL; @@ -4348,7 +4380,7 @@ Py_DECREF(arg); Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4352 "Python/generated_cases.c.h" + #line 4384 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4362,7 +4394,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3114 "Python/bytecodes.c" + #line 3125 "Python/bytecodes.c" /* Builtin METH_FASTCALL functions, without keywords */ assert(kwnames == NULL); int is_meth = method != NULL; @@ -4394,7 +4426,7 @@ 'invalid'). In those cases an exception is set, so we must handle it. */ - #line 4398 "Python/generated_cases.c.h" + #line 4430 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4408,7 +4440,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3149 "Python/bytecodes.c" + #line 3160 "Python/bytecodes.c" /* Builtin METH_FASTCALL | METH_KEYWORDS functions */ int is_meth = method != NULL; int total_args = oparg; @@ -4440,7 +4472,7 @@ } Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4444 "Python/generated_cases.c.h" + #line 4476 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4454,7 +4486,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3184 "Python/bytecodes.c" + #line 3195 "Python/bytecodes.c" assert(kwnames == NULL); /* len(o) */ int is_meth = method != NULL; @@ -4479,7 +4511,7 @@ Py_DECREF(callable); Py_DECREF(arg); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4483 "Python/generated_cases.c.h" + #line 4515 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4492,7 +4524,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3211 "Python/bytecodes.c" + #line 3222 "Python/bytecodes.c" assert(kwnames == NULL); /* isinstance(o, o2) */ int is_meth = method != NULL; @@ -4519,7 +4551,7 @@ Py_DECREF(cls); Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4523 "Python/generated_cases.c.h" + #line 4555 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4531,7 +4563,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *self = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; - #line 3241 "Python/bytecodes.c" + #line 3252 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); assert(method != NULL); @@ -4549,14 +4581,14 @@ SKIP_OVER(INLINE_CACHE_ENTRIES_CALL + 1); assert(next_instr[-1].op.code == POP_TOP); DISPATCH(); - #line 4553 "Python/generated_cases.c.h" + #line 4585 "Python/generated_cases.c.h" } TARGET(CALL_NO_KW_METHOD_DESCRIPTOR_O) { PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3261 "Python/bytecodes.c" + #line 3272 "Python/bytecodes.c" assert(kwnames == NULL); int is_meth = method != NULL; int total_args = oparg; @@ -4587,7 +4619,7 @@ Py_DECREF(arg); Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4591 "Python/generated_cases.c.h" + #line 4623 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4600,7 +4632,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3295 "Python/bytecodes.c" + #line 3306 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -4629,7 +4661,7 @@ } Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4633 "Python/generated_cases.c.h" + #line 4665 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4642,7 +4674,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3327 "Python/bytecodes.c" + #line 3338 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 0 || oparg == 1); int is_meth = method != NULL; @@ -4671,7 +4703,7 @@ Py_DECREF(self); Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4675 "Python/generated_cases.c.h" + #line 4707 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4684,7 +4716,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3359 "Python/bytecodes.c" + #line 3370 "Python/bytecodes.c" assert(kwnames == NULL); int is_meth = method != NULL; int total_args = oparg; @@ -4712,7 +4744,7 @@ } Py_DECREF(callable); if (res == NULL) { STACK_SHRINK(oparg); goto pop_2_error; } - #line 4716 "Python/generated_cases.c.h" + #line 4748 "Python/generated_cases.c.h" STACK_SHRINK(oparg); STACK_SHRINK(1); stack_pointer[-1] = res; @@ -4722,9 +4754,9 @@ } TARGET(INSTRUMENTED_CALL_FUNCTION_EX) { - #line 3390 "Python/bytecodes.c" + #line 3401 "Python/bytecodes.c" GO_TO_INSTRUCTION(CALL_FUNCTION_EX); - #line 4728 "Python/generated_cases.c.h" + #line 4760 "Python/generated_cases.c.h" } TARGET(CALL_FUNCTION_EX) { @@ -4733,7 +4765,7 @@ PyObject *callargs = stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))]; PyObject *func = stack_pointer[-(2 + ((oparg & 1) ? 1 : 0))]; PyObject *result; - #line 3394 "Python/bytecodes.c" + #line 3405 "Python/bytecodes.c" // DICT_MERGE is called before this opcode if there are kwargs. // It converts all dict subtypes in kwargs into regular dicts. assert(kwargs == NULL || PyDict_CheckExact(kwargs)); @@ -4795,14 +4827,14 @@ } result = PyObject_Call(func, callargs, kwargs); } - #line 4799 "Python/generated_cases.c.h" + #line 4831 "Python/generated_cases.c.h" Py_DECREF(func); Py_DECREF(callargs); Py_XDECREF(kwargs); - #line 3456 "Python/bytecodes.c" + #line 3467 "Python/bytecodes.c" assert(PEEK(3 + (oparg & 1)) == NULL); if (result == NULL) { STACK_SHRINK(((oparg & 1) ? 1 : 0)); goto pop_3_error; } - #line 4806 "Python/generated_cases.c.h" + #line 4838 "Python/generated_cases.c.h" STACK_SHRINK(((oparg & 1) ? 1 : 0)); STACK_SHRINK(2); stack_pointer[-1] = result; @@ -4813,7 +4845,7 @@ TARGET(MAKE_FUNCTION) { PyObject *codeobj = stack_pointer[-1]; PyObject *func; - #line 3462 "Python/bytecodes.c" + #line 3473 "Python/bytecodes.c" PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -4825,7 +4857,7 @@ func_obj->func_version = ((PyCodeObject *)codeobj)->co_version; func = (PyObject *)func_obj; - #line 4829 "Python/generated_cases.c.h" + #line 4861 "Python/generated_cases.c.h" stack_pointer[-1] = func; DISPATCH(); } @@ -4833,7 +4865,7 @@ TARGET(SET_FUNCTION_ATTRIBUTE) { PyObject *func = stack_pointer[-1]; PyObject *attr = stack_pointer[-2]; - #line 3476 "Python/bytecodes.c" + #line 3487 "Python/bytecodes.c" assert(PyFunction_Check(func)); PyFunctionObject *func_obj = (PyFunctionObject *)func; switch(oparg) { @@ -4858,14 +4890,14 @@ default: Py_UNREACHABLE(); } - #line 4862 "Python/generated_cases.c.h" + #line 4894 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = func; DISPATCH(); } TARGET(RETURN_GENERATOR) { - #line 3503 "Python/bytecodes.c" + #line 3514 "Python/bytecodes.c" assert(PyFunction_Check(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)frame->f_funcobj; PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); @@ -4886,7 +4918,7 @@ frame = cframe.current_frame = prev; _PyFrame_StackPush(frame, (PyObject *)gen); goto resume_frame; - #line 4890 "Python/generated_cases.c.h" + #line 4922 "Python/generated_cases.c.h" } TARGET(BUILD_SLICE) { @@ -4894,15 +4926,15 @@ PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))]; PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))]; PyObject *slice; - #line 3526 "Python/bytecodes.c" + #line 3537 "Python/bytecodes.c" slice = PySlice_New(start, stop, step); - #line 4900 "Python/generated_cases.c.h" + #line 4932 "Python/generated_cases.c.h" Py_DECREF(start); Py_DECREF(stop); Py_XDECREF(step); - #line 3528 "Python/bytecodes.c" + #line 3539 "Python/bytecodes.c" if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; } - #line 4906 "Python/generated_cases.c.h" + #line 4938 "Python/generated_cases.c.h" STACK_SHRINK(((oparg == 3) ? 1 : 0)); STACK_SHRINK(1); stack_pointer[-1] = slice; @@ -4912,14 +4944,14 @@ TARGET(CONVERT_VALUE) { PyObject *value = stack_pointer[-1]; PyObject *result; - #line 3532 "Python/bytecodes.c" + #line 3543 "Python/bytecodes.c" convertion_func_ptr conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = CONVERSION_FUNCTIONS[oparg]; result = conv_fn(value); Py_DECREF(value); if (result == NULL) goto pop_1_error; - #line 4923 "Python/generated_cases.c.h" + #line 4955 "Python/generated_cases.c.h" stack_pointer[-1] = result; DISPATCH(); } @@ -4927,7 +4959,7 @@ TARGET(FORMAT_SIMPLE) { PyObject *value = stack_pointer[-1]; PyObject *res; - #line 3541 "Python/bytecodes.c" + #line 3552 "Python/bytecodes.c" /* If value is a unicode object, then we know the result * of format(value) is value itself. */ if (!PyUnicode_CheckExact(value)) { @@ -4938,7 +4970,7 @@ else { res = value; } - #line 4942 "Python/generated_cases.c.h" + #line 4974 "Python/generated_cases.c.h" stack_pointer[-1] = res; DISPATCH(); } @@ -4947,12 +4979,12 @@ PyObject *fmt_spec = stack_pointer[-1]; PyObject *value = stack_pointer[-2]; PyObject *res; - #line 3554 "Python/bytecodes.c" + #line 3565 "Python/bytecodes.c" res = PyObject_Format(value, fmt_spec); Py_DECREF(value); Py_DECREF(fmt_spec); if (res == NULL) goto pop_2_error; - #line 4956 "Python/generated_cases.c.h" + #line 4988 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; DISPATCH(); @@ -4961,10 +4993,10 @@ TARGET(COPY) { PyObject *bottom = stack_pointer[-(1 + (oparg-1))]; PyObject *top; - #line 3561 "Python/bytecodes.c" + #line 3572 "Python/bytecodes.c" assert(oparg > 0); top = Py_NewRef(bottom); - #line 4968 "Python/generated_cases.c.h" + #line 5000 "Python/generated_cases.c.h" STACK_GROW(1); stack_pointer[-1] = top; DISPATCH(); @@ -4976,7 +5008,7 @@ PyObject *rhs = stack_pointer[-1]; PyObject *lhs = stack_pointer[-2]; PyObject *res; - #line 3566 "Python/bytecodes.c" + #line 3577 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -4991,12 +5023,12 @@ assert((unsigned)oparg < Py_ARRAY_LENGTH(binary_ops)); assert(binary_ops[oparg]); res = binary_ops[oparg](lhs, rhs); - #line 4995 "Python/generated_cases.c.h" + #line 5027 "Python/generated_cases.c.h" Py_DECREF(lhs); Py_DECREF(rhs); - #line 3581 "Python/bytecodes.c" + #line 3592 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; - #line 5000 "Python/generated_cases.c.h" + #line 5032 "Python/generated_cases.c.h" STACK_SHRINK(1); stack_pointer[-1] = res; next_instr += 1; @@ -5006,16 +5038,16 @@ TARGET(SWAP) { PyObject *top = stack_pointer[-1]; PyObject *bottom = stack_pointer[-(2 + (oparg-2))]; - #line 3586 "Python/bytecodes.c" + #line 3597 "Python/bytecodes.c" assert(oparg >= 2); - #line 5012 "Python/generated_cases.c.h" + #line 5044 "Python/generated_cases.c.h" stack_pointer[-1] = bottom; stack_pointer[-(2 + (oparg-2))] = top; DISPATCH(); } TARGET(INSTRUMENTED_INSTRUCTION) { - #line 3590 "Python/bytecodes.c" + #line 3601 "Python/bytecodes.c" int next_opcode = _Py_call_instrumentation_instruction( tstate, frame, next_instr-1); if (next_opcode < 0) goto error; @@ -5027,48 +5059,48 @@ assert(next_opcode > 0 && next_opcode < 256); opcode = next_opcode; DISPATCH_GOTO(); - #line 5031 "Python/generated_cases.c.h" + #line 5063 "Python/generated_cases.c.h" } TARGET(INSTRUMENTED_JUMP_FORWARD) { - #line 3604 "Python/bytecodes.c" + #line 3615 "Python/bytecodes.c" INSTRUMENTED_JUMP(next_instr-1, next_instr+oparg, PY_MONITORING_EVENT_JUMP); - #line 5037 "Python/generated_cases.c.h" + #line 5069 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_JUMP_BACKWARD) { - #line 3608 "Python/bytecodes.c" + #line 3619 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); INSTRUMENTED_JUMP(next_instr-1, next_instr+1-oparg, PY_MONITORING_EVENT_JUMP); - #line 5045 "Python/generated_cases.c.h" + #line 5077 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) { - #line 3613 "Python/bytecodes.c" + #line 3624 "Python/bytecodes.c" PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; int offset = Py_IsTrue(cond) * oparg; INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); - #line 5056 "Python/generated_cases.c.h" + #line 5088 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) { - #line 3621 "Python/bytecodes.c" + #line 3632 "Python/bytecodes.c" PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; int offset = Py_IsFalse(cond) * oparg; INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); - #line 5067 "Python/generated_cases.c.h" + #line 5099 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) { - #line 3629 "Python/bytecodes.c" + #line 3640 "Python/bytecodes.c" PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; @@ -5080,12 +5112,12 @@ offset = 0; } INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); - #line 5084 "Python/generated_cases.c.h" + #line 5116 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) { - #line 3643 "Python/bytecodes.c" + #line 3654 "Python/bytecodes.c" PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; @@ -5097,30 +5129,30 @@ offset = oparg; } INSTRUMENTED_JUMP(here, next_instr + offset, PY_MONITORING_EVENT_BRANCH); - #line 5101 "Python/generated_cases.c.h" + #line 5133 "Python/generated_cases.c.h" DISPATCH(); } TARGET(EXTENDED_ARG) { - #line 3657 "Python/bytecodes.c" + #line 3668 "Python/bytecodes.c" assert(oparg); opcode = next_instr->op.code; oparg = oparg << 8 | next_instr->op.arg; PRE_DISPATCH_GOTO(); DISPATCH_GOTO(); - #line 5112 "Python/generated_cases.c.h" + #line 5144 "Python/generated_cases.c.h" } TARGET(CACHE) { - #line 3665 "Python/bytecodes.c" + #line 3676 "Python/bytecodes.c" assert(0 && "Executing a cache."); Py_UNREACHABLE(); - #line 5119 "Python/generated_cases.c.h" + #line 5151 "Python/generated_cases.c.h" } TARGET(RESERVED) { - #line 3670 "Python/bytecodes.c" + #line 3681 "Python/bytecodes.c" assert(0 && "Executing RESERVED instruction."); Py_UNREACHABLE(); - #line 5126 "Python/generated_cases.c.h" + #line 5158 "Python/generated_cases.c.h" } diff --git a/Python/opcode_metadata.h b/Python/opcode_metadata.h index ce2384ee2e4833..2ebd1cea63019e 100644 --- a/Python/opcode_metadata.h +++ b/Python/opcode_metadata.h @@ -35,7 +35,10 @@ #define _BINARY_OP_ADD_UNICODE 313 #define _LOAD_LOCALS 314 #define _LOAD_FROM_DICT_OR_GLOBALS 315 -#define IS_NONE 316 +#define _SKIP_CACHE 316 +#define _GUARD_GLOBALS_VERSION 317 +#define _GUARD_BUILTINS_VERSION 318 +#define IS_NONE 319 #ifndef NEED_OPCODE_METADATA extern int _PyOpcode_num_popped(int opcode, int oparg, bool jump); @@ -1311,7 +1314,10 @@ const char * const _PyOpcode_uop_name[512] = { [313] = "_BINARY_OP_ADD_UNICODE", [314] = "_LOAD_LOCALS", [315] = "_LOAD_FROM_DICT_OR_GLOBALS", - [316] = "IS_NONE", + [316] = "_SKIP_CACHE", + [317] = "_GUARD_GLOBALS_VERSION", + [318] = "_GUARD_BUILTINS_VERSION", + [319] = "IS_NONE", }; #endif // NEED_OPCODE_METADATA #endif From bd4a57e6a7349d17cc66f43737dcc54c177cd316 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 12 Jul 2023 10:48:19 +0100 Subject: [PATCH 3/5] Add news --- .../2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst new file mode 100644 index 00000000000000..ef3d3ea0e3af58 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst @@ -0,0 +1 @@ +Split `LOAD_GLOBAL` specializations into micro-ops. From 1bbc5152ead594c22a3b999f5f9e40b98471723b Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 12 Jul 2023 11:19:59 +0100 Subject: [PATCH 4/5] Fix markup --- .../2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst b/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst index ef3d3ea0e3af58..f20226e5c54d16 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2023-07-12-10-48-08.gh-issue-104909.sWjcr2.rst @@ -1 +1 @@ -Split `LOAD_GLOBAL` specializations into micro-ops. +Split :opcode:`LOAD_GLOBAL` specializations into micro-ops. From 2e8712d678b9ed4b4b3434230ca4fa1839edd2f9 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Wed, 12 Jul 2023 12:53:51 +0100 Subject: [PATCH 5/5] Address review comments --- Python/bytecodes.c | 14 +- Python/executor_cases.c.h | 144 +++++++++--------- Python/generated_cases.c.h | 302 ++++++++++++++++++------------------- 3 files changed, 234 insertions(+), 226 deletions(-) diff --git a/Python/bytecodes.c b/Python/bytecodes.c index eb71cd3c76fe91..f5ce2e72d26762 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -1388,9 +1388,17 @@ dummy_func( null = NULL; } - macro(LOAD_GLOBAL_MODULE) = _SKIP_CACHE + _GUARD_GLOBALS_VERSION + _SKIP_CACHE + _LOAD_GLOBAL_MODULE; - - macro(LOAD_GLOBAL_BUILTIN) = _SKIP_CACHE + _GUARD_GLOBALS_VERSION + _GUARD_BUILTINS_VERSION + _LOAD_GLOBAL_BUILTINS; + macro(LOAD_GLOBAL_MODULE) = + _SKIP_CACHE + // Skip over the counter + _GUARD_GLOBALS_VERSION + + _SKIP_CACHE + // Skip over the builtins version + _LOAD_GLOBAL_MODULE; + + macro(LOAD_GLOBAL_BUILTIN) = + _SKIP_CACHE + // Skip over the counter + _GUARD_GLOBALS_VERSION + + _GUARD_BUILTINS_VERSION + + _LOAD_GLOBAL_BUILTINS; inst(DELETE_FAST, (--)) { PyObject *v = GETLOCAL(oparg); diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 1c97f0efe42d8b..94536ed8ce5a10 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -1181,7 +1181,7 @@ } case DELETE_FAST: { - #line 1396 "Python/bytecodes.c" + #line 1404 "Python/bytecodes.c" PyObject *v = GETLOCAL(oparg); if (v == NULL) goto unbound_local_error; SETLOCAL(oparg, NULL); @@ -1190,7 +1190,7 @@ } case DELETE_DEREF: { - #line 1413 "Python/bytecodes.c" + #line 1421 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); // Can't use ERROR_IF here. @@ -1208,7 +1208,7 @@ case LOAD_FROM_DICT_OR_DEREF: { PyObject *class_dict = stack_pointer[-1]; PyObject *value; - #line 1426 "Python/bytecodes.c" + #line 1434 "Python/bytecodes.c" PyObject *name; assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); @@ -1234,7 +1234,7 @@ case LOAD_DEREF: { PyObject *value; - #line 1447 "Python/bytecodes.c" + #line 1455 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); value = PyCell_GET(cell); if (value == NULL) { @@ -1250,7 +1250,7 @@ case STORE_DEREF: { PyObject *v = stack_pointer[-1]; - #line 1457 "Python/bytecodes.c" + #line 1465 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); PyCell_SET(cell, v); @@ -1261,7 +1261,7 @@ } case COPY_FREE_VARS: { - #line 1464 "Python/bytecodes.c" + #line 1472 "Python/bytecodes.c" /* Copy closure variables to free variables */ PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyFunction_Check(frame->f_funcobj)); @@ -1279,13 +1279,13 @@ case BUILD_STRING: { PyObject **pieces = (stack_pointer - oparg); PyObject *str; - #line 1477 "Python/bytecodes.c" + #line 1485 "Python/bytecodes.c" str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg); #line 1285 "Python/executor_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(pieces[_i]); } - #line 1479 "Python/bytecodes.c" + #line 1487 "Python/bytecodes.c" if (str == NULL) { STACK_SHRINK(oparg); goto error; } #line 1291 "Python/executor_cases.c.h" STACK_SHRINK(oparg); @@ -1297,7 +1297,7 @@ case BUILD_TUPLE: { PyObject **values = (stack_pointer - oparg); PyObject *tup; - #line 1483 "Python/bytecodes.c" + #line 1491 "Python/bytecodes.c" tup = _PyTuple_FromArraySteal(values, oparg); if (tup == NULL) { STACK_SHRINK(oparg); goto error; } #line 1304 "Python/executor_cases.c.h" @@ -1310,7 +1310,7 @@ case BUILD_LIST: { PyObject **values = (stack_pointer - oparg); PyObject *list; - #line 1488 "Python/bytecodes.c" + #line 1496 "Python/bytecodes.c" list = _PyList_FromArraySteal(values, oparg); if (list == NULL) { STACK_SHRINK(oparg); goto error; } #line 1317 "Python/executor_cases.c.h" @@ -1323,7 +1323,7 @@ case LIST_EXTEND: { PyObject *iterable = stack_pointer[-1]; PyObject *list = stack_pointer[-(2 + (oparg-1))]; - #line 1493 "Python/bytecodes.c" + #line 1501 "Python/bytecodes.c" PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); if (none_val == NULL) { if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) && @@ -1336,7 +1336,7 @@ } #line 1338 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 1504 "Python/bytecodes.c" + #line 1512 "Python/bytecodes.c" if (true) goto pop_1_error; } assert(Py_IsNone(none_val)); @@ -1349,11 +1349,11 @@ case SET_UPDATE: { PyObject *iterable = stack_pointer[-1]; PyObject *set = stack_pointer[-(2 + (oparg-1))]; - #line 1511 "Python/bytecodes.c" + #line 1519 "Python/bytecodes.c" int err = _PySet_Update(set, iterable); #line 1355 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 1513 "Python/bytecodes.c" + #line 1521 "Python/bytecodes.c" if (err < 0) goto pop_1_error; #line 1359 "Python/executor_cases.c.h" STACK_SHRINK(1); @@ -1363,7 +1363,7 @@ case BUILD_SET: { PyObject **values = (stack_pointer - oparg); PyObject *set; - #line 1517 "Python/bytecodes.c" + #line 1525 "Python/bytecodes.c" set = PySet_New(NULL); if (set == NULL) goto error; @@ -1388,7 +1388,7 @@ case BUILD_MAP: { PyObject **values = (stack_pointer - oparg*2); PyObject *map; - #line 1534 "Python/bytecodes.c" + #line 1542 "Python/bytecodes.c" map = _PyDict_FromItems( values, 2, values+1, 2, @@ -1400,7 +1400,7 @@ for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } - #line 1542 "Python/bytecodes.c" + #line 1550 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg*2); goto error; } #line 1406 "Python/executor_cases.c.h" STACK_SHRINK(oparg*2); @@ -1410,7 +1410,7 @@ } case SETUP_ANNOTATIONS: { - #line 1546 "Python/bytecodes.c" + #line 1554 "Python/bytecodes.c" int err; PyObject *ann_dict; if (LOCALS() == NULL) { @@ -1456,7 +1456,7 @@ PyObject *keys = stack_pointer[-1]; PyObject **values = (stack_pointer - (1 + oparg)); PyObject *map; - #line 1586 "Python/bytecodes.c" + #line 1594 "Python/bytecodes.c" if (!PyTuple_CheckExact(keys) || PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { _PyErr_SetString(tstate, PyExc_SystemError, @@ -1471,7 +1471,7 @@ Py_DECREF(values[_i]); } Py_DECREF(keys); - #line 1596 "Python/bytecodes.c" + #line 1604 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; } #line 1477 "Python/executor_cases.c.h" STACK_SHRINK(oparg); @@ -1481,7 +1481,7 @@ case DICT_UPDATE: { PyObject *update = stack_pointer[-1]; - #line 1600 "Python/bytecodes.c" + #line 1608 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (PyDict_Update(dict, update) < 0) { if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) { @@ -1491,7 +1491,7 @@ } #line 1493 "Python/executor_cases.c.h" Py_DECREF(update); - #line 1608 "Python/bytecodes.c" + #line 1616 "Python/bytecodes.c" if (true) goto pop_1_error; } #line 1498 "Python/executor_cases.c.h" @@ -1502,14 +1502,14 @@ case DICT_MERGE: { PyObject *update = stack_pointer[-1]; - #line 1614 "Python/bytecodes.c" + #line 1622 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (_PyDict_MergeEx(dict, update, 2) < 0) { format_kwargs_error(tstate, PEEK(3 + oparg), update); #line 1511 "Python/executor_cases.c.h" Py_DECREF(update); - #line 1619 "Python/bytecodes.c" + #line 1627 "Python/bytecodes.c" if (true) goto pop_1_error; } #line 1516 "Python/executor_cases.c.h" @@ -1521,7 +1521,7 @@ case MAP_ADD: { PyObject *value = stack_pointer[-1]; PyObject *key = stack_pointer[-2]; - #line 1625 "Python/bytecodes.c" + #line 1633 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack assert(PyDict_CheckExact(dict)); /* dict[key] = value */ @@ -1538,7 +1538,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1708 "Python/bytecodes.c" + #line 1716 "Python/bytecodes.c" assert(!(oparg & 1)); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -1549,7 +1549,7 @@ Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1715 "Python/bytecodes.c" + #line 1723 "Python/bytecodes.c" if (res == NULL) goto pop_3_error; #line 1555 "Python/executor_cases.c.h" STACK_SHRINK(2); @@ -1565,7 +1565,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2; PyObject *res; - #line 1719 "Python/bytecodes.c" + #line 1727 "Python/bytecodes.c" assert(oparg & 1); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -1600,7 +1600,7 @@ PyObject *owner = stack_pointer[-1]; PyObject *res2 = NULL; PyObject *res; - #line 1760 "Python/bytecodes.c" + #line 1768 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyAttrCache *cache = (_PyAttrCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -1636,7 +1636,7 @@ */ #line 1638 "Python/executor_cases.c.h" Py_DECREF(owner); - #line 1794 "Python/bytecodes.c" + #line 1802 "Python/bytecodes.c" if (meth == NULL) goto pop_1_error; res2 = NULL; res = meth; @@ -1647,7 +1647,7 @@ res = PyObject_GetAttr(owner, name); #line 1649 "Python/executor_cases.c.h" Py_DECREF(owner); - #line 1803 "Python/bytecodes.c" + #line 1811 "Python/bytecodes.c" if (res == NULL) goto pop_1_error; } #line 1654 "Python/executor_cases.c.h" @@ -1662,7 +1662,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2036 "Python/bytecodes.c" + #line 2044 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyCompareOpCache *cache = (_PyCompareOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -1678,7 +1678,7 @@ #line 1679 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2049 "Python/bytecodes.c" + #line 2057 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; if (oparg & 16) { int res_bool = PyObject_IsTrue(res); @@ -1696,7 +1696,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2059 "Python/bytecodes.c" + #line 2067 "Python/bytecodes.c" DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -1718,7 +1718,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2074 "Python/bytecodes.c" + #line 2082 "Python/bytecodes.c" DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP); DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP); @@ -1744,7 +1744,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2093 "Python/bytecodes.c" + #line 2101 "Python/bytecodes.c" DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -1767,12 +1767,12 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2108 "Python/bytecodes.c" + #line 2116 "Python/bytecodes.c" int res = Py_Is(left, right) ^ oparg; #line 1773 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2110 "Python/bytecodes.c" + #line 2118 "Python/bytecodes.c" b = res ? Py_True : Py_False; #line 1778 "Python/executor_cases.c.h" STACK_SHRINK(1); @@ -1784,12 +1784,12 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2114 "Python/bytecodes.c" + #line 2122 "Python/bytecodes.c" int res = PySequence_Contains(right, left); #line 1790 "Python/executor_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2116 "Python/bytecodes.c" + #line 2124 "Python/bytecodes.c" if (res < 0) goto pop_2_error; b = (res ^ oparg) ? Py_True : Py_False; #line 1796 "Python/executor_cases.c.h" @@ -1803,12 +1803,12 @@ PyObject *exc_value = stack_pointer[-2]; PyObject *rest; PyObject *match; - #line 2121 "Python/bytecodes.c" + #line 2129 "Python/bytecodes.c" if (check_except_star_type_valid(tstate, match_type) < 0) { #line 1809 "Python/executor_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2123 "Python/bytecodes.c" + #line 2131 "Python/bytecodes.c" if (true) goto pop_2_error; } @@ -1819,7 +1819,7 @@ #line 1820 "Python/executor_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2131 "Python/bytecodes.c" + #line 2139 "Python/bytecodes.c" if (res < 0) goto pop_2_error; assert((match == NULL) == (rest == NULL)); @@ -1838,19 +1838,19 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2142 "Python/bytecodes.c" + #line 2150 "Python/bytecodes.c" assert(PyExceptionInstance_Check(left)); if (check_except_type_valid(tstate, right) < 0) { #line 1845 "Python/executor_cases.c.h" Py_DECREF(right); - #line 2145 "Python/bytecodes.c" + #line 2153 "Python/bytecodes.c" if (true) goto pop_1_error; } int res = PyErr_GivenExceptionMatches(left, right); #line 1852 "Python/executor_cases.c.h" Py_DECREF(right); - #line 2150 "Python/bytecodes.c" + #line 2158 "Python/bytecodes.c" b = res ? Py_True : Py_False; #line 1856 "Python/executor_cases.c.h" stack_pointer[-1] = b; @@ -1860,7 +1860,7 @@ case IS_NONE: { PyObject *value = stack_pointer[-1]; PyObject *b; - #line 2229 "Python/bytecodes.c" + #line 2237 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } @@ -1868,7 +1868,7 @@ b = Py_False; #line 1870 "Python/executor_cases.c.h" Py_DECREF(value); - #line 2235 "Python/bytecodes.c" + #line 2243 "Python/bytecodes.c" } #line 1874 "Python/executor_cases.c.h" stack_pointer[-1] = b; @@ -1878,7 +1878,7 @@ case GET_LEN: { PyObject *obj = stack_pointer[-1]; PyObject *len_o; - #line 2252 "Python/bytecodes.c" + #line 2260 "Python/bytecodes.c" // PUSH(len(TOS)) Py_ssize_t len_i = PyObject_Length(obj); if (len_i < 0) goto error; @@ -1895,7 +1895,7 @@ PyObject *type = stack_pointer[-2]; PyObject *subject = stack_pointer[-3]; PyObject *attrs; - #line 2260 "Python/bytecodes.c" + #line 2268 "Python/bytecodes.c" // Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or // None on failure. assert(PyTuple_CheckExact(names)); @@ -1904,7 +1904,7 @@ Py_DECREF(subject); Py_DECREF(type); Py_DECREF(names); - #line 2265 "Python/bytecodes.c" + #line 2273 "Python/bytecodes.c" if (attrs) { assert(PyTuple_CheckExact(attrs)); // Success! } @@ -1921,7 +1921,7 @@ case MATCH_MAPPING: { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2275 "Python/bytecodes.c" + #line 2283 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? Py_True : Py_False; #line 1928 "Python/executor_cases.c.h" @@ -1933,7 +1933,7 @@ case MATCH_SEQUENCE: { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2280 "Python/bytecodes.c" + #line 2288 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? Py_True : Py_False; #line 1940 "Python/executor_cases.c.h" @@ -1946,7 +1946,7 @@ PyObject *keys = stack_pointer[-1]; PyObject *subject = stack_pointer[-2]; PyObject *values_or_none; - #line 2285 "Python/bytecodes.c" + #line 2293 "Python/bytecodes.c" // On successful match, PUSH(values). Otherwise, PUSH(None). values_or_none = match_keys(tstate, subject, keys); if (values_or_none == NULL) goto error; @@ -1959,12 +1959,12 @@ case GET_ITER: { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2291 "Python/bytecodes.c" + #line 2299 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ iter = PyObject_GetIter(iterable); #line 1966 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 2294 "Python/bytecodes.c" + #line 2302 "Python/bytecodes.c" if (iter == NULL) goto pop_1_error; #line 1970 "Python/executor_cases.c.h" stack_pointer[-1] = iter; @@ -1974,7 +1974,7 @@ case GET_YIELD_FROM_ITER: { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2298 "Python/bytecodes.c" + #line 2306 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ if (PyCoro_CheckExact(iterable)) { /* `iterable` is a coroutine */ @@ -1999,7 +1999,7 @@ } #line 2001 "Python/executor_cases.c.h" Py_DECREF(iterable); - #line 2321 "Python/bytecodes.c" + #line 2329 "Python/bytecodes.c" } #line 2005 "Python/executor_cases.c.h" stack_pointer[-1] = iter; @@ -2011,7 +2011,7 @@ PyObject *lasti = stack_pointer[-3]; PyObject *exit_func = stack_pointer[-4]; PyObject *res; - #line 2553 "Python/bytecodes.c" + #line 2561 "Python/bytecodes.c" /* At the top of the stack are 4 values: - val: TOP = exc_info() - unused: SECOND = previous exception @@ -2041,7 +2041,7 @@ case PUSH_EXC_INFO: { PyObject *new_exc = stack_pointer[-1]; PyObject *prev_exc; - #line 2592 "Python/bytecodes.c" + #line 2600 "Python/bytecodes.c" _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = exc_info->exc_value; @@ -2060,7 +2060,7 @@ case EXIT_INIT_CHECK: { PyObject *should_be_none = stack_pointer[-1]; - #line 2991 "Python/bytecodes.c" + #line 2999 "Python/bytecodes.c" assert(STACK_LEVEL() == 2); if (should_be_none != Py_None) { PyErr_Format(PyExc_TypeError, @@ -2076,7 +2076,7 @@ case MAKE_FUNCTION: { PyObject *codeobj = stack_pointer[-1]; PyObject *func; - #line 3405 "Python/bytecodes.c" + #line 3413 "Python/bytecodes.c" PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -2096,7 +2096,7 @@ case SET_FUNCTION_ATTRIBUTE: { PyObject *func = stack_pointer[-1]; PyObject *attr = stack_pointer[-2]; - #line 3419 "Python/bytecodes.c" + #line 3427 "Python/bytecodes.c" assert(PyFunction_Check(func)); PyFunctionObject *func_obj = (PyFunctionObject *)func; switch(oparg) { @@ -2132,13 +2132,13 @@ PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))]; PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))]; PyObject *slice; - #line 3469 "Python/bytecodes.c" + #line 3477 "Python/bytecodes.c" slice = PySlice_New(start, stop, step); #line 2138 "Python/executor_cases.c.h" Py_DECREF(start); Py_DECREF(stop); Py_XDECREF(step); - #line 3471 "Python/bytecodes.c" + #line 3479 "Python/bytecodes.c" if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; } #line 2144 "Python/executor_cases.c.h" STACK_SHRINK(((oparg == 3) ? 1 : 0)); @@ -2150,7 +2150,7 @@ case CONVERT_VALUE: { PyObject *value = stack_pointer[-1]; PyObject *result; - #line 3475 "Python/bytecodes.c" + #line 3483 "Python/bytecodes.c" convertion_func_ptr conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = CONVERSION_FUNCTIONS[oparg]; @@ -2165,7 +2165,7 @@ case FORMAT_SIMPLE: { PyObject *value = stack_pointer[-1]; PyObject *res; - #line 3484 "Python/bytecodes.c" + #line 3492 "Python/bytecodes.c" /* If value is a unicode object, then we know the result * of format(value) is value itself. */ if (!PyUnicode_CheckExact(value)) { @@ -2185,7 +2185,7 @@ PyObject *fmt_spec = stack_pointer[-1]; PyObject *value = stack_pointer[-2]; PyObject *res; - #line 3497 "Python/bytecodes.c" + #line 3505 "Python/bytecodes.c" res = PyObject_Format(value, fmt_spec); Py_DECREF(value); Py_DECREF(fmt_spec); @@ -2199,7 +2199,7 @@ case COPY: { PyObject *bottom = stack_pointer[-(1 + (oparg-1))]; PyObject *top; - #line 3504 "Python/bytecodes.c" + #line 3512 "Python/bytecodes.c" assert(oparg > 0); top = Py_NewRef(bottom); #line 2206 "Python/executor_cases.c.h" @@ -2213,7 +2213,7 @@ PyObject *rhs = stack_pointer[-1]; PyObject *lhs = stack_pointer[-2]; PyObject *res; - #line 3509 "Python/bytecodes.c" + #line 3517 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2231,7 +2231,7 @@ #line 2232 "Python/executor_cases.c.h" Py_DECREF(lhs); Py_DECREF(rhs); - #line 3524 "Python/bytecodes.c" + #line 3532 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; #line 2237 "Python/executor_cases.c.h" STACK_SHRINK(1); @@ -2242,7 +2242,7 @@ case SWAP: { PyObject *top = stack_pointer[-1]; PyObject *bottom = stack_pointer[-(2 + (oparg-2))]; - #line 3529 "Python/bytecodes.c" + #line 3537 "Python/bytecodes.c" assert(oparg >= 2); #line 2248 "Python/executor_cases.c.h" stack_pointer[-1] = bottom; diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index f28d56fa6d3043..fcdf732315830a 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -1983,7 +1983,7 @@ } TARGET(DELETE_FAST) { - #line 1396 "Python/bytecodes.c" + #line 1404 "Python/bytecodes.c" PyObject *v = GETLOCAL(oparg); if (v == NULL) goto unbound_local_error; SETLOCAL(oparg, NULL); @@ -1992,7 +1992,7 @@ } TARGET(MAKE_CELL) { - #line 1402 "Python/bytecodes.c" + #line 1410 "Python/bytecodes.c" // "initial" is probably NULL but not if it's an arg (or set // via PyFrame_LocalsToFast() before MAKE_CELL has run). PyObject *initial = GETLOCAL(oparg); @@ -2006,7 +2006,7 @@ } TARGET(DELETE_DEREF) { - #line 1413 "Python/bytecodes.c" + #line 1421 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); // Can't use ERROR_IF here. @@ -2024,7 +2024,7 @@ TARGET(LOAD_FROM_DICT_OR_DEREF) { PyObject *class_dict = stack_pointer[-1]; PyObject *value; - #line 1426 "Python/bytecodes.c" + #line 1434 "Python/bytecodes.c" PyObject *name; assert(class_dict); assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus); @@ -2050,7 +2050,7 @@ TARGET(LOAD_DEREF) { PyObject *value; - #line 1447 "Python/bytecodes.c" + #line 1455 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); value = PyCell_GET(cell); if (value == NULL) { @@ -2066,7 +2066,7 @@ TARGET(STORE_DEREF) { PyObject *v = stack_pointer[-1]; - #line 1457 "Python/bytecodes.c" + #line 1465 "Python/bytecodes.c" PyObject *cell = GETLOCAL(oparg); PyObject *oldobj = PyCell_GET(cell); PyCell_SET(cell, v); @@ -2077,7 +2077,7 @@ } TARGET(COPY_FREE_VARS) { - #line 1464 "Python/bytecodes.c" + #line 1472 "Python/bytecodes.c" /* Copy closure variables to free variables */ PyCodeObject *co = _PyFrame_GetCode(frame); assert(PyFunction_Check(frame->f_funcobj)); @@ -2095,13 +2095,13 @@ TARGET(BUILD_STRING) { PyObject **pieces = (stack_pointer - oparg); PyObject *str; - #line 1477 "Python/bytecodes.c" + #line 1485 "Python/bytecodes.c" str = _PyUnicode_JoinArray(&_Py_STR(empty), pieces, oparg); #line 2101 "Python/generated_cases.c.h" for (int _i = oparg; --_i >= 0;) { Py_DECREF(pieces[_i]); } - #line 1479 "Python/bytecodes.c" + #line 1487 "Python/bytecodes.c" if (str == NULL) { STACK_SHRINK(oparg); goto error; } #line 2107 "Python/generated_cases.c.h" STACK_SHRINK(oparg); @@ -2113,7 +2113,7 @@ TARGET(BUILD_TUPLE) { PyObject **values = (stack_pointer - oparg); PyObject *tup; - #line 1483 "Python/bytecodes.c" + #line 1491 "Python/bytecodes.c" tup = _PyTuple_FromArraySteal(values, oparg); if (tup == NULL) { STACK_SHRINK(oparg); goto error; } #line 2120 "Python/generated_cases.c.h" @@ -2126,7 +2126,7 @@ TARGET(BUILD_LIST) { PyObject **values = (stack_pointer - oparg); PyObject *list; - #line 1488 "Python/bytecodes.c" + #line 1496 "Python/bytecodes.c" list = _PyList_FromArraySteal(values, oparg); if (list == NULL) { STACK_SHRINK(oparg); goto error; } #line 2133 "Python/generated_cases.c.h" @@ -2139,7 +2139,7 @@ TARGET(LIST_EXTEND) { PyObject *iterable = stack_pointer[-1]; PyObject *list = stack_pointer[-(2 + (oparg-1))]; - #line 1493 "Python/bytecodes.c" + #line 1501 "Python/bytecodes.c" PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable); if (none_val == NULL) { if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) && @@ -2152,7 +2152,7 @@ } #line 2154 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 1504 "Python/bytecodes.c" + #line 1512 "Python/bytecodes.c" if (true) goto pop_1_error; } assert(Py_IsNone(none_val)); @@ -2165,11 +2165,11 @@ TARGET(SET_UPDATE) { PyObject *iterable = stack_pointer[-1]; PyObject *set = stack_pointer[-(2 + (oparg-1))]; - #line 1511 "Python/bytecodes.c" + #line 1519 "Python/bytecodes.c" int err = _PySet_Update(set, iterable); #line 2171 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 1513 "Python/bytecodes.c" + #line 1521 "Python/bytecodes.c" if (err < 0) goto pop_1_error; #line 2175 "Python/generated_cases.c.h" STACK_SHRINK(1); @@ -2179,7 +2179,7 @@ TARGET(BUILD_SET) { PyObject **values = (stack_pointer - oparg); PyObject *set; - #line 1517 "Python/bytecodes.c" + #line 1525 "Python/bytecodes.c" set = PySet_New(NULL); if (set == NULL) goto error; @@ -2204,7 +2204,7 @@ TARGET(BUILD_MAP) { PyObject **values = (stack_pointer - oparg*2); PyObject *map; - #line 1534 "Python/bytecodes.c" + #line 1542 "Python/bytecodes.c" map = _PyDict_FromItems( values, 2, values+1, 2, @@ -2216,7 +2216,7 @@ for (int _i = oparg*2; --_i >= 0;) { Py_DECREF(values[_i]); } - #line 1542 "Python/bytecodes.c" + #line 1550 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg*2); goto error; } #line 2222 "Python/generated_cases.c.h" STACK_SHRINK(oparg*2); @@ -2226,7 +2226,7 @@ } TARGET(SETUP_ANNOTATIONS) { - #line 1546 "Python/bytecodes.c" + #line 1554 "Python/bytecodes.c" int err; PyObject *ann_dict; if (LOCALS() == NULL) { @@ -2272,7 +2272,7 @@ PyObject *keys = stack_pointer[-1]; PyObject **values = (stack_pointer - (1 + oparg)); PyObject *map; - #line 1586 "Python/bytecodes.c" + #line 1594 "Python/bytecodes.c" if (!PyTuple_CheckExact(keys) || PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { _PyErr_SetString(tstate, PyExc_SystemError, @@ -2287,7 +2287,7 @@ Py_DECREF(values[_i]); } Py_DECREF(keys); - #line 1596 "Python/bytecodes.c" + #line 1604 "Python/bytecodes.c" if (map == NULL) { STACK_SHRINK(oparg); goto pop_1_error; } #line 2293 "Python/generated_cases.c.h" STACK_SHRINK(oparg); @@ -2297,7 +2297,7 @@ TARGET(DICT_UPDATE) { PyObject *update = stack_pointer[-1]; - #line 1600 "Python/bytecodes.c" + #line 1608 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (PyDict_Update(dict, update) < 0) { if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) { @@ -2307,7 +2307,7 @@ } #line 2309 "Python/generated_cases.c.h" Py_DECREF(update); - #line 1608 "Python/bytecodes.c" + #line 1616 "Python/bytecodes.c" if (true) goto pop_1_error; } #line 2314 "Python/generated_cases.c.h" @@ -2318,14 +2318,14 @@ TARGET(DICT_MERGE) { PyObject *update = stack_pointer[-1]; - #line 1614 "Python/bytecodes.c" + #line 1622 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 1); // update is still on the stack if (_PyDict_MergeEx(dict, update, 2) < 0) { format_kwargs_error(tstate, PEEK(3 + oparg), update); #line 2327 "Python/generated_cases.c.h" Py_DECREF(update); - #line 1619 "Python/bytecodes.c" + #line 1627 "Python/bytecodes.c" if (true) goto pop_1_error; } #line 2332 "Python/generated_cases.c.h" @@ -2337,7 +2337,7 @@ TARGET(MAP_ADD) { PyObject *value = stack_pointer[-1]; PyObject *key = stack_pointer[-2]; - #line 1625 "Python/bytecodes.c" + #line 1633 "Python/bytecodes.c" PyObject *dict = PEEK(oparg + 2); // key, value are still on the stack assert(PyDict_CheckExact(dict)); /* dict[key] = value */ @@ -2349,7 +2349,7 @@ } TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) { - #line 1633 "Python/bytecodes.c" + #line 1641 "Python/bytecodes.c" _PySuperAttrCache *cache = (_PySuperAttrCache *)next_instr; // cancel out the decrement that will happen in LOAD_SUPER_ATTR; we // don't want to specialize instrumented instructions @@ -2366,7 +2366,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1647 "Python/bytecodes.c" + #line 1655 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2); int load_method = oparg & 1; #if ENABLE_SPECIALIZATION @@ -2412,7 +2412,7 @@ Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1689 "Python/bytecodes.c" + #line 1697 "Python/bytecodes.c" if (super == NULL) goto pop_3_error; res = PyObject_GetAttr(super, name); Py_DECREF(super); @@ -2432,7 +2432,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2 = NULL; PyObject *res; - #line 1708 "Python/bytecodes.c" + #line 1716 "Python/bytecodes.c" assert(!(oparg & 1)); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -2443,7 +2443,7 @@ Py_DECREF(global_super); Py_DECREF(class); Py_DECREF(self); - #line 1715 "Python/bytecodes.c" + #line 1723 "Python/bytecodes.c" if (res == NULL) goto pop_3_error; #line 2449 "Python/generated_cases.c.h" STACK_SHRINK(2); @@ -2460,7 +2460,7 @@ PyObject *global_super = stack_pointer[-3]; PyObject *res2; PyObject *res; - #line 1719 "Python/bytecodes.c" + #line 1727 "Python/bytecodes.c" assert(oparg & 1); DEOPT_IF(global_super != (PyObject *)&PySuper_Type, LOAD_SUPER_ATTR); DEOPT_IF(!PyType_Check(class), LOAD_SUPER_ATTR); @@ -2497,7 +2497,7 @@ PyObject *owner = stack_pointer[-1]; PyObject *res2 = NULL; PyObject *res; - #line 1760 "Python/bytecodes.c" + #line 1768 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyAttrCache *cache = (_PyAttrCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2533,7 +2533,7 @@ */ #line 2535 "Python/generated_cases.c.h" Py_DECREF(owner); - #line 1794 "Python/bytecodes.c" + #line 1802 "Python/bytecodes.c" if (meth == NULL) goto pop_1_error; res2 = NULL; res = meth; @@ -2544,7 +2544,7 @@ res = PyObject_GetAttr(owner, name); #line 2546 "Python/generated_cases.c.h" Py_DECREF(owner); - #line 1803 "Python/bytecodes.c" + #line 1811 "Python/bytecodes.c" if (res == NULL) goto pop_1_error; } #line 2551 "Python/generated_cases.c.h" @@ -2561,7 +2561,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1812 "Python/bytecodes.c" + #line 1820 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2589,7 +2589,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1828 "Python/bytecodes.c" + #line 1836 "Python/bytecodes.c" DEOPT_IF(!PyModule_CheckExact(owner), LOAD_ATTR); PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner)->md_dict; assert(dict != NULL); @@ -2617,7 +2617,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1844 "Python/bytecodes.c" + #line 1852 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2659,7 +2659,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1874 "Python/bytecodes.c" + #line 1882 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, LOAD_ATTR); @@ -2684,7 +2684,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 1887 "Python/bytecodes.c" + #line 1895 "Python/bytecodes.c" DEOPT_IF(!PyType_Check(cls), LOAD_ATTR); DEOPT_IF(((PyTypeObject *)cls)->tp_version_tag != type_version, @@ -2710,7 +2710,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t func_version = read_u32(&next_instr[3].cache); PyObject *fget = read_obj(&next_instr[5].cache); - #line 1902 "Python/bytecodes.c" + #line 1910 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR); PyTypeObject *cls = Py_TYPE(owner); @@ -2742,7 +2742,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t func_version = read_u32(&next_instr[3].cache); PyObject *getattribute = read_obj(&next_instr[5].cache); - #line 1928 "Python/bytecodes.c" + #line 1936 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, LOAD_ATTR); PyTypeObject *cls = Py_TYPE(owner); DEOPT_IF(cls->tp_version_tag != type_version, LOAD_ATTR); @@ -2776,7 +2776,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 1956 "Python/bytecodes.c" + #line 1964 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2805,7 +2805,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t hint = read_u16(&next_instr[3].cache); - #line 1976 "Python/bytecodes.c" + #line 1984 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2855,7 +2855,7 @@ PyObject *value = stack_pointer[-2]; uint32_t type_version = read_u32(&next_instr[1].cache); uint16_t index = read_u16(&next_instr[3].cache); - #line 2017 "Python/bytecodes.c" + #line 2025 "Python/bytecodes.c" PyTypeObject *tp = Py_TYPE(owner); assert(type_version != 0); DEOPT_IF(tp->tp_version_tag != type_version, STORE_ATTR); @@ -2877,7 +2877,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2036 "Python/bytecodes.c" + #line 2044 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyCompareOpCache *cache = (_PyCompareOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -2893,7 +2893,7 @@ #line 2894 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2049 "Python/bytecodes.c" + #line 2057 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; if (oparg & 16) { int res_bool = PyObject_IsTrue(res); @@ -2912,7 +2912,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2059 "Python/bytecodes.c" + #line 2067 "Python/bytecodes.c" DEOPT_IF(!PyFloat_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyFloat_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -2935,7 +2935,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2074 "Python/bytecodes.c" + #line 2082 "Python/bytecodes.c" DEOPT_IF(!PyLong_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyLong_CheckExact(right), COMPARE_OP); DEOPT_IF(!_PyLong_IsCompact((PyLongObject *)left), COMPARE_OP); @@ -2962,7 +2962,7 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *res; - #line 2093 "Python/bytecodes.c" + #line 2101 "Python/bytecodes.c" DEOPT_IF(!PyUnicode_CheckExact(left), COMPARE_OP); DEOPT_IF(!PyUnicode_CheckExact(right), COMPARE_OP); STAT_INC(COMPARE_OP, hit); @@ -2986,12 +2986,12 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2108 "Python/bytecodes.c" + #line 2116 "Python/bytecodes.c" int res = Py_Is(left, right) ^ oparg; #line 2992 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2110 "Python/bytecodes.c" + #line 2118 "Python/bytecodes.c" b = res ? Py_True : Py_False; #line 2997 "Python/generated_cases.c.h" STACK_SHRINK(1); @@ -3003,12 +3003,12 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2114 "Python/bytecodes.c" + #line 2122 "Python/bytecodes.c" int res = PySequence_Contains(right, left); #line 3009 "Python/generated_cases.c.h" Py_DECREF(left); Py_DECREF(right); - #line 2116 "Python/bytecodes.c" + #line 2124 "Python/bytecodes.c" if (res < 0) goto pop_2_error; b = (res ^ oparg) ? Py_True : Py_False; #line 3015 "Python/generated_cases.c.h" @@ -3022,12 +3022,12 @@ PyObject *exc_value = stack_pointer[-2]; PyObject *rest; PyObject *match; - #line 2121 "Python/bytecodes.c" + #line 2129 "Python/bytecodes.c" if (check_except_star_type_valid(tstate, match_type) < 0) { #line 3028 "Python/generated_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2123 "Python/bytecodes.c" + #line 2131 "Python/bytecodes.c" if (true) goto pop_2_error; } @@ -3038,7 +3038,7 @@ #line 3039 "Python/generated_cases.c.h" Py_DECREF(exc_value); Py_DECREF(match_type); - #line 2131 "Python/bytecodes.c" + #line 2139 "Python/bytecodes.c" if (res < 0) goto pop_2_error; assert((match == NULL) == (rest == NULL)); @@ -3057,19 +3057,19 @@ PyObject *right = stack_pointer[-1]; PyObject *left = stack_pointer[-2]; PyObject *b; - #line 2142 "Python/bytecodes.c" + #line 2150 "Python/bytecodes.c" assert(PyExceptionInstance_Check(left)); if (check_except_type_valid(tstate, right) < 0) { #line 3064 "Python/generated_cases.c.h" Py_DECREF(right); - #line 2145 "Python/bytecodes.c" + #line 2153 "Python/bytecodes.c" if (true) goto pop_1_error; } int res = PyErr_GivenExceptionMatches(left, right); #line 3071 "Python/generated_cases.c.h" Py_DECREF(right); - #line 2150 "Python/bytecodes.c" + #line 2158 "Python/bytecodes.c" b = res ? Py_True : Py_False; #line 3075 "Python/generated_cases.c.h" stack_pointer[-1] = b; @@ -3080,13 +3080,13 @@ PyObject *fromlist = stack_pointer[-1]; PyObject *level = stack_pointer[-2]; PyObject *res; - #line 2154 "Python/bytecodes.c" + #line 2162 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); res = import_name(tstate, frame, name, fromlist, level); #line 3087 "Python/generated_cases.c.h" Py_DECREF(level); Py_DECREF(fromlist); - #line 2157 "Python/bytecodes.c" + #line 2165 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; #line 3092 "Python/generated_cases.c.h" STACK_SHRINK(1); @@ -3097,7 +3097,7 @@ TARGET(IMPORT_FROM) { PyObject *from = stack_pointer[-1]; PyObject *res; - #line 2161 "Python/bytecodes.c" + #line 2169 "Python/bytecodes.c" PyObject *name = GETITEM(FRAME_CO_NAMES, oparg); res = import_from(tstate, from, name); if (res == NULL) goto error; @@ -3108,14 +3108,14 @@ } TARGET(JUMP_FORWARD) { - #line 2167 "Python/bytecodes.c" + #line 2175 "Python/bytecodes.c" JUMPBY(oparg); #line 3114 "Python/generated_cases.c.h" DISPATCH(); } TARGET(JUMP_BACKWARD) { - #line 2171 "Python/bytecodes.c" + #line 2179 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); _Py_CODEUNIT *here = next_instr - 1; assert(oparg <= INSTR_OFFSET()); @@ -3139,7 +3139,7 @@ } TARGET(ENTER_EXECUTOR) { - #line 2202 "Python/bytecodes.c" + #line 2210 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); PyCodeObject *code = _PyFrame_GetCode(frame); @@ -3159,7 +3159,7 @@ TARGET(POP_JUMP_IF_FALSE) { PyObject *cond = stack_pointer[-1]; - #line 2219 "Python/bytecodes.c" + #line 2227 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsFalse(cond)); #line 3166 "Python/generated_cases.c.h" @@ -3169,7 +3169,7 @@ TARGET(POP_JUMP_IF_TRUE) { PyObject *cond = stack_pointer[-1]; - #line 2224 "Python/bytecodes.c" + #line 2232 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsTrue(cond)); #line 3176 "Python/generated_cases.c.h" @@ -3182,7 +3182,7 @@ { PyObject *value = _tmp_1; PyObject *b; - #line 2229 "Python/bytecodes.c" + #line 2237 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } @@ -3190,14 +3190,14 @@ b = Py_False; #line 3192 "Python/generated_cases.c.h" Py_DECREF(value); - #line 2235 "Python/bytecodes.c" + #line 2243 "Python/bytecodes.c" } #line 3196 "Python/generated_cases.c.h" _tmp_1 = b; } { PyObject *cond = _tmp_1; - #line 2224 "Python/bytecodes.c" + #line 2232 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsTrue(cond)); #line 3204 "Python/generated_cases.c.h" @@ -3211,7 +3211,7 @@ { PyObject *value = _tmp_1; PyObject *b; - #line 2229 "Python/bytecodes.c" + #line 2237 "Python/bytecodes.c" if (Py_IsNone(value)) { b = Py_True; } @@ -3219,14 +3219,14 @@ b = Py_False; #line 3221 "Python/generated_cases.c.h" Py_DECREF(value); - #line 2235 "Python/bytecodes.c" + #line 2243 "Python/bytecodes.c" } #line 3225 "Python/generated_cases.c.h" _tmp_1 = b; } { PyObject *cond = _tmp_1; - #line 2219 "Python/bytecodes.c" + #line 2227 "Python/bytecodes.c" assert(PyBool_Check(cond)); JUMPBY(oparg * Py_IsFalse(cond)); #line 3233 "Python/generated_cases.c.h" @@ -3236,7 +3236,7 @@ } TARGET(JUMP_BACKWARD_NO_INTERRUPT) { - #line 2243 "Python/bytecodes.c" + #line 2251 "Python/bytecodes.c" /* This bytecode is used in the `yield from` or `await` loop. * If there is an interrupt, we want it handled in the innermost * generator or coroutine, so we deliberately do not check it here. @@ -3250,7 +3250,7 @@ TARGET(GET_LEN) { PyObject *obj = stack_pointer[-1]; PyObject *len_o; - #line 2252 "Python/bytecodes.c" + #line 2260 "Python/bytecodes.c" // PUSH(len(TOS)) Py_ssize_t len_i = PyObject_Length(obj); if (len_i < 0) goto error; @@ -3267,7 +3267,7 @@ PyObject *type = stack_pointer[-2]; PyObject *subject = stack_pointer[-3]; PyObject *attrs; - #line 2260 "Python/bytecodes.c" + #line 2268 "Python/bytecodes.c" // Pop TOS and TOS1. Set TOS to a tuple of attributes on success, or // None on failure. assert(PyTuple_CheckExact(names)); @@ -3276,7 +3276,7 @@ Py_DECREF(subject); Py_DECREF(type); Py_DECREF(names); - #line 2265 "Python/bytecodes.c" + #line 2273 "Python/bytecodes.c" if (attrs) { assert(PyTuple_CheckExact(attrs)); // Success! } @@ -3293,7 +3293,7 @@ TARGET(MATCH_MAPPING) { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2275 "Python/bytecodes.c" + #line 2283 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING; res = match ? Py_True : Py_False; #line 3300 "Python/generated_cases.c.h" @@ -3305,7 +3305,7 @@ TARGET(MATCH_SEQUENCE) { PyObject *subject = stack_pointer[-1]; PyObject *res; - #line 2280 "Python/bytecodes.c" + #line 2288 "Python/bytecodes.c" int match = Py_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE; res = match ? Py_True : Py_False; #line 3312 "Python/generated_cases.c.h" @@ -3318,7 +3318,7 @@ PyObject *keys = stack_pointer[-1]; PyObject *subject = stack_pointer[-2]; PyObject *values_or_none; - #line 2285 "Python/bytecodes.c" + #line 2293 "Python/bytecodes.c" // On successful match, PUSH(values). Otherwise, PUSH(None). values_or_none = match_keys(tstate, subject, keys); if (values_or_none == NULL) goto error; @@ -3331,12 +3331,12 @@ TARGET(GET_ITER) { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2291 "Python/bytecodes.c" + #line 2299 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ iter = PyObject_GetIter(iterable); #line 3338 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 2294 "Python/bytecodes.c" + #line 2302 "Python/bytecodes.c" if (iter == NULL) goto pop_1_error; #line 3342 "Python/generated_cases.c.h" stack_pointer[-1] = iter; @@ -3346,7 +3346,7 @@ TARGET(GET_YIELD_FROM_ITER) { PyObject *iterable = stack_pointer[-1]; PyObject *iter; - #line 2298 "Python/bytecodes.c" + #line 2306 "Python/bytecodes.c" /* before: [obj]; after [getiter(obj)] */ if (PyCoro_CheckExact(iterable)) { /* `iterable` is a coroutine */ @@ -3371,7 +3371,7 @@ } #line 3373 "Python/generated_cases.c.h" Py_DECREF(iterable); - #line 2321 "Python/bytecodes.c" + #line 2329 "Python/bytecodes.c" } #line 3377 "Python/generated_cases.c.h" stack_pointer[-1] = iter; @@ -3383,7 +3383,7 @@ static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size"); PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2339 "Python/bytecodes.c" + #line 2347 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyForIterCache *cache = (_PyForIterCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -3423,7 +3423,7 @@ } TARGET(INSTRUMENTED_FOR_ITER) { - #line 2373 "Python/bytecodes.c" + #line 2381 "Python/bytecodes.c" _Py_CODEUNIT *here = next_instr-1; _Py_CODEUNIT *target; PyObject *iter = TOP(); @@ -3456,7 +3456,7 @@ TARGET(FOR_ITER_LIST) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2401 "Python/bytecodes.c" + #line 2409 "Python/bytecodes.c" DEOPT_IF(Py_TYPE(iter) != &PyListIter_Type, FOR_ITER); _PyListIterObject *it = (_PyListIterObject *)iter; STAT_INC(FOR_ITER, hit); @@ -3487,7 +3487,7 @@ TARGET(FOR_ITER_TUPLE) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2424 "Python/bytecodes.c" + #line 2432 "Python/bytecodes.c" _PyTupleIterObject *it = (_PyTupleIterObject *)iter; DEOPT_IF(Py_TYPE(it) != &PyTupleIter_Type, FOR_ITER); STAT_INC(FOR_ITER, hit); @@ -3518,7 +3518,7 @@ TARGET(FOR_ITER_RANGE) { PyObject *iter = stack_pointer[-1]; PyObject *next; - #line 2447 "Python/bytecodes.c" + #line 2455 "Python/bytecodes.c" _PyRangeIterObject *r = (_PyRangeIterObject *)iter; DEOPT_IF(Py_TYPE(r) != &PyRangeIter_Type, FOR_ITER); STAT_INC(FOR_ITER, hit); @@ -3546,7 +3546,7 @@ TARGET(FOR_ITER_GEN) { PyObject *iter = stack_pointer[-1]; - #line 2468 "Python/bytecodes.c" + #line 2476 "Python/bytecodes.c" DEOPT_IF(tstate->interp->eval_frame, FOR_ITER); PyGenObject *gen = (PyGenObject *)iter; DEOPT_IF(Py_TYPE(gen) != &PyGen_Type, FOR_ITER); @@ -3569,7 +3569,7 @@ PyObject *mgr = stack_pointer[-1]; PyObject *exit; PyObject *res; - #line 2486 "Python/bytecodes.c" + #line 2494 "Python/bytecodes.c" PyObject *enter = _PyObject_LookupSpecial(mgr, &_Py_ID(__aenter__)); if (enter == NULL) { if (!_PyErr_Occurred(tstate)) { @@ -3594,7 +3594,7 @@ } #line 3596 "Python/generated_cases.c.h" Py_DECREF(mgr); - #line 2509 "Python/bytecodes.c" + #line 2517 "Python/bytecodes.c" res = _PyObject_CallNoArgs(enter); Py_DECREF(enter); if (res == NULL) { @@ -3612,7 +3612,7 @@ PyObject *mgr = stack_pointer[-1]; PyObject *exit; PyObject *res; - #line 2518 "Python/bytecodes.c" + #line 2526 "Python/bytecodes.c" /* pop the context manager, push its __exit__ and the * value returned from calling its __enter__ */ @@ -3640,7 +3640,7 @@ } #line 3642 "Python/generated_cases.c.h" Py_DECREF(mgr); - #line 2544 "Python/bytecodes.c" + #line 2552 "Python/bytecodes.c" res = _PyObject_CallNoArgs(enter); Py_DECREF(enter); if (res == NULL) { @@ -3659,7 +3659,7 @@ PyObject *lasti = stack_pointer[-3]; PyObject *exit_func = stack_pointer[-4]; PyObject *res; - #line 2553 "Python/bytecodes.c" + #line 2561 "Python/bytecodes.c" /* At the top of the stack are 4 values: - val: TOP = exc_info() - unused: SECOND = previous exception @@ -3689,7 +3689,7 @@ TARGET(PUSH_EXC_INFO) { PyObject *new_exc = stack_pointer[-1]; PyObject *prev_exc; - #line 2592 "Python/bytecodes.c" + #line 2600 "Python/bytecodes.c" _PyErr_StackItem *exc_info = tstate->exc_info; if (exc_info->exc_value != NULL) { prev_exc = exc_info->exc_value; @@ -3713,7 +3713,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t keys_version = read_u32(&next_instr[3].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2604 "Python/bytecodes.c" + #line 2612 "Python/bytecodes.c" assert(oparg & 1); /* Cached method object */ PyTypeObject *self_cls = Py_TYPE(self); @@ -3744,7 +3744,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2623 "Python/bytecodes.c" + #line 2631 "Python/bytecodes.c" assert(oparg & 1); PyTypeObject *self_cls = Py_TYPE(self); DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR); @@ -3769,7 +3769,7 @@ uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t keys_version = read_u32(&next_instr[3].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2635 "Python/bytecodes.c" + #line 2643 "Python/bytecodes.c" assert((oparg & 1) == 0); PyTypeObject *self_cls = Py_TYPE(self); assert(type_version != 0); @@ -3784,7 +3784,7 @@ assert(descr != NULL); #line 3786 "Python/generated_cases.c.h" Py_DECREF(self); - #line 2648 "Python/bytecodes.c" + #line 2656 "Python/bytecodes.c" res = Py_NewRef(descr); #line 3790 "Python/generated_cases.c.h" STACK_GROW((0 ? 1 : 0)); @@ -3800,7 +3800,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2652 "Python/bytecodes.c" + #line 2660 "Python/bytecodes.c" assert((oparg & 1) == 0); PyTypeObject *self_cls = Py_TYPE(self); assert(type_version != 0); @@ -3810,7 +3810,7 @@ assert(descr != NULL); #line 3812 "Python/generated_cases.c.h" Py_DECREF(self); - #line 2660 "Python/bytecodes.c" + #line 2668 "Python/bytecodes.c" res = Py_NewRef(descr); #line 3816 "Python/generated_cases.c.h" STACK_GROW((0 ? 1 : 0)); @@ -3826,7 +3826,7 @@ PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); - #line 2664 "Python/bytecodes.c" + #line 2672 "Python/bytecodes.c" assert(oparg & 1); PyTypeObject *self_cls = Py_TYPE(self); DEOPT_IF(self_cls->tp_version_tag != type_version, LOAD_ATTR); @@ -3849,7 +3849,7 @@ } TARGET(KW_NAMES) { - #line 2680 "Python/bytecodes.c" + #line 2688 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg < PyTuple_GET_SIZE(FRAME_CO_CONSTS)); kwnames = GETITEM(FRAME_CO_CONSTS, oparg); @@ -3858,7 +3858,7 @@ } TARGET(INSTRUMENTED_CALL) { - #line 2686 "Python/bytecodes.c" + #line 2694 "Python/bytecodes.c" int is_meth = PEEK(oparg+2) != NULL; int total_args = oparg + is_meth; PyObject *function = PEEK(total_args + 1); @@ -3881,7 +3881,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2732 "Python/bytecodes.c" + #line 2740 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -3975,7 +3975,7 @@ TARGET(CALL_BOUND_METHOD_EXACT_ARGS) { PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; - #line 2820 "Python/bytecodes.c" + #line 2828 "Python/bytecodes.c" DEOPT_IF(method != NULL, CALL); DEOPT_IF(Py_TYPE(callable) != &PyMethod_Type, CALL); STAT_INC(CALL, hit); @@ -3994,7 +3994,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; uint32_t func_version = read_u32(&next_instr[1].cache); - #line 2832 "Python/bytecodes.c" + #line 2840 "Python/bytecodes.c" assert(kwnames == NULL); DEOPT_IF(tstate->interp->eval_frame, CALL); int is_meth = method != NULL; @@ -4028,7 +4028,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; uint32_t func_version = read_u32(&next_instr[1].cache); - #line 2860 "Python/bytecodes.c" + #line 2868 "Python/bytecodes.c" assert(kwnames == NULL); DEOPT_IF(tstate->interp->eval_frame, CALL); int is_meth = method != NULL; @@ -4072,7 +4072,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2898 "Python/bytecodes.c" + #line 2906 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4095,7 +4095,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2910 "Python/bytecodes.c" + #line 2918 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4120,7 +4120,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 2924 "Python/bytecodes.c" + #line 2932 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); DEOPT_IF(null != NULL, CALL); @@ -4144,7 +4144,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *null = stack_pointer[-(2 + oparg)]; - #line 2938 "Python/bytecodes.c" + #line 2946 "Python/bytecodes.c" /* This instruction does the following: * 1. Creates the object (by calling ``object.__new__``) * 2. Pushes a shim frame to the frame stack (to cleanup after ``__init__``) @@ -4200,7 +4200,7 @@ TARGET(EXIT_INIT_CHECK) { PyObject *should_be_none = stack_pointer[-1]; - #line 2991 "Python/bytecodes.c" + #line 2999 "Python/bytecodes.c" assert(STACK_LEVEL() == 2); if (should_be_none != Py_None) { PyErr_Format(PyExc_TypeError, @@ -4218,7 +4218,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3001 "Python/bytecodes.c" + #line 3009 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -4254,7 +4254,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3026 "Python/bytecodes.c" + #line 3034 "Python/bytecodes.c" /* Builtin METH_O functions */ assert(kwnames == NULL); int is_meth = method != NULL; @@ -4296,7 +4296,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3057 "Python/bytecodes.c" + #line 3065 "Python/bytecodes.c" /* Builtin METH_FASTCALL functions, without keywords */ assert(kwnames == NULL); int is_meth = method != NULL; @@ -4342,7 +4342,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3092 "Python/bytecodes.c" + #line 3100 "Python/bytecodes.c" /* Builtin METH_FASTCALL | METH_KEYWORDS functions */ int is_meth = method != NULL; int total_args = oparg; @@ -4388,7 +4388,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3127 "Python/bytecodes.c" + #line 3135 "Python/bytecodes.c" assert(kwnames == NULL); /* len(o) */ int is_meth = method != NULL; @@ -4426,7 +4426,7 @@ PyObject *callable = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3154 "Python/bytecodes.c" + #line 3162 "Python/bytecodes.c" assert(kwnames == NULL); /* isinstance(o, o2) */ int is_meth = method != NULL; @@ -4465,7 +4465,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *self = stack_pointer[-(1 + oparg)]; PyObject *method = stack_pointer[-(2 + oparg)]; - #line 3184 "Python/bytecodes.c" + #line 3192 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 1); assert(method != NULL); @@ -4490,7 +4490,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3204 "Python/bytecodes.c" + #line 3212 "Python/bytecodes.c" assert(kwnames == NULL); int is_meth = method != NULL; int total_args = oparg; @@ -4534,7 +4534,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3238 "Python/bytecodes.c" + #line 3246 "Python/bytecodes.c" int is_meth = method != NULL; int total_args = oparg; if (is_meth) { @@ -4576,7 +4576,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3270 "Python/bytecodes.c" + #line 3278 "Python/bytecodes.c" assert(kwnames == NULL); assert(oparg == 0 || oparg == 1); int is_meth = method != NULL; @@ -4618,7 +4618,7 @@ PyObject **args = (stack_pointer - oparg); PyObject *method = stack_pointer[-(2 + oparg)]; PyObject *res; - #line 3302 "Python/bytecodes.c" + #line 3310 "Python/bytecodes.c" assert(kwnames == NULL); int is_meth = method != NULL; int total_args = oparg; @@ -4656,7 +4656,7 @@ } TARGET(INSTRUMENTED_CALL_FUNCTION_EX) { - #line 3333 "Python/bytecodes.c" + #line 3341 "Python/bytecodes.c" GO_TO_INSTRUCTION(CALL_FUNCTION_EX); #line 4662 "Python/generated_cases.c.h" } @@ -4667,7 +4667,7 @@ PyObject *callargs = stack_pointer[-(1 + ((oparg & 1) ? 1 : 0))]; PyObject *func = stack_pointer[-(2 + ((oparg & 1) ? 1 : 0))]; PyObject *result; - #line 3337 "Python/bytecodes.c" + #line 3345 "Python/bytecodes.c" // DICT_MERGE is called before this opcode if there are kwargs. // It converts all dict subtypes in kwargs into regular dicts. assert(kwargs == NULL || PyDict_CheckExact(kwargs)); @@ -4733,7 +4733,7 @@ Py_DECREF(func); Py_DECREF(callargs); Py_XDECREF(kwargs); - #line 3399 "Python/bytecodes.c" + #line 3407 "Python/bytecodes.c" assert(PEEK(3 + (oparg & 1)) == NULL); if (result == NULL) { STACK_SHRINK(((oparg & 1) ? 1 : 0)); goto pop_3_error; } #line 4740 "Python/generated_cases.c.h" @@ -4747,7 +4747,7 @@ TARGET(MAKE_FUNCTION) { PyObject *codeobj = stack_pointer[-1]; PyObject *func; - #line 3405 "Python/bytecodes.c" + #line 3413 "Python/bytecodes.c" PyFunctionObject *func_obj = (PyFunctionObject *) PyFunction_New(codeobj, GLOBALS()); @@ -4767,7 +4767,7 @@ TARGET(SET_FUNCTION_ATTRIBUTE) { PyObject *func = stack_pointer[-1]; PyObject *attr = stack_pointer[-2]; - #line 3419 "Python/bytecodes.c" + #line 3427 "Python/bytecodes.c" assert(PyFunction_Check(func)); PyFunctionObject *func_obj = (PyFunctionObject *)func; switch(oparg) { @@ -4799,7 +4799,7 @@ } TARGET(RETURN_GENERATOR) { - #line 3446 "Python/bytecodes.c" + #line 3454 "Python/bytecodes.c" assert(PyFunction_Check(frame->f_funcobj)); PyFunctionObject *func = (PyFunctionObject *)frame->f_funcobj; PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func); @@ -4828,13 +4828,13 @@ PyObject *stop = stack_pointer[-(1 + ((oparg == 3) ? 1 : 0))]; PyObject *start = stack_pointer[-(2 + ((oparg == 3) ? 1 : 0))]; PyObject *slice; - #line 3469 "Python/bytecodes.c" + #line 3477 "Python/bytecodes.c" slice = PySlice_New(start, stop, step); #line 4834 "Python/generated_cases.c.h" Py_DECREF(start); Py_DECREF(stop); Py_XDECREF(step); - #line 3471 "Python/bytecodes.c" + #line 3479 "Python/bytecodes.c" if (slice == NULL) { STACK_SHRINK(((oparg == 3) ? 1 : 0)); goto pop_2_error; } #line 4840 "Python/generated_cases.c.h" STACK_SHRINK(((oparg == 3) ? 1 : 0)); @@ -4846,7 +4846,7 @@ TARGET(CONVERT_VALUE) { PyObject *value = stack_pointer[-1]; PyObject *result; - #line 3475 "Python/bytecodes.c" + #line 3483 "Python/bytecodes.c" convertion_func_ptr conv_fn; assert(oparg >= FVC_STR && oparg <= FVC_ASCII); conv_fn = CONVERSION_FUNCTIONS[oparg]; @@ -4861,7 +4861,7 @@ TARGET(FORMAT_SIMPLE) { PyObject *value = stack_pointer[-1]; PyObject *res; - #line 3484 "Python/bytecodes.c" + #line 3492 "Python/bytecodes.c" /* If value is a unicode object, then we know the result * of format(value) is value itself. */ if (!PyUnicode_CheckExact(value)) { @@ -4881,7 +4881,7 @@ PyObject *fmt_spec = stack_pointer[-1]; PyObject *value = stack_pointer[-2]; PyObject *res; - #line 3497 "Python/bytecodes.c" + #line 3505 "Python/bytecodes.c" res = PyObject_Format(value, fmt_spec); Py_DECREF(value); Py_DECREF(fmt_spec); @@ -4895,7 +4895,7 @@ TARGET(COPY) { PyObject *bottom = stack_pointer[-(1 + (oparg-1))]; PyObject *top; - #line 3504 "Python/bytecodes.c" + #line 3512 "Python/bytecodes.c" assert(oparg > 0); top = Py_NewRef(bottom); #line 4902 "Python/generated_cases.c.h" @@ -4910,7 +4910,7 @@ PyObject *rhs = stack_pointer[-1]; PyObject *lhs = stack_pointer[-2]; PyObject *res; - #line 3509 "Python/bytecodes.c" + #line 3517 "Python/bytecodes.c" #if ENABLE_SPECIALIZATION _PyBinaryOpCache *cache = (_PyBinaryOpCache *)next_instr; if (ADAPTIVE_COUNTER_IS_ZERO(cache->counter)) { @@ -4928,7 +4928,7 @@ #line 4929 "Python/generated_cases.c.h" Py_DECREF(lhs); Py_DECREF(rhs); - #line 3524 "Python/bytecodes.c" + #line 3532 "Python/bytecodes.c" if (res == NULL) goto pop_2_error; #line 4934 "Python/generated_cases.c.h" STACK_SHRINK(1); @@ -4940,7 +4940,7 @@ TARGET(SWAP) { PyObject *top = stack_pointer[-1]; PyObject *bottom = stack_pointer[-(2 + (oparg-2))]; - #line 3529 "Python/bytecodes.c" + #line 3537 "Python/bytecodes.c" assert(oparg >= 2); #line 4946 "Python/generated_cases.c.h" stack_pointer[-1] = bottom; @@ -4949,7 +4949,7 @@ } TARGET(INSTRUMENTED_INSTRUCTION) { - #line 3533 "Python/bytecodes.c" + #line 3541 "Python/bytecodes.c" int next_opcode = _Py_call_instrumentation_instruction( tstate, frame, next_instr-1); if (next_opcode < 0) goto error; @@ -4965,14 +4965,14 @@ } TARGET(INSTRUMENTED_JUMP_FORWARD) { - #line 3547 "Python/bytecodes.c" + #line 3555 "Python/bytecodes.c" INSTRUMENTED_JUMP(next_instr-1, next_instr+oparg, PY_MONITORING_EVENT_JUMP); #line 4971 "Python/generated_cases.c.h" DISPATCH(); } TARGET(INSTRUMENTED_JUMP_BACKWARD) { - #line 3551 "Python/bytecodes.c" + #line 3559 "Python/bytecodes.c" CHECK_EVAL_BREAKER(); INSTRUMENTED_JUMP(next_instr-1, next_instr+1-oparg, PY_MONITORING_EVENT_JUMP); #line 4979 "Python/generated_cases.c.h" @@ -4980,7 +4980,7 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) { - #line 3556 "Python/bytecodes.c" + #line 3564 "Python/bytecodes.c" PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; @@ -4991,7 +4991,7 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) { - #line 3564 "Python/bytecodes.c" + #line 3572 "Python/bytecodes.c" PyObject *cond = POP(); assert(PyBool_Check(cond)); _Py_CODEUNIT *here = next_instr - 1; @@ -5002,7 +5002,7 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) { - #line 3572 "Python/bytecodes.c" + #line 3580 "Python/bytecodes.c" PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; @@ -5019,7 +5019,7 @@ } TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) { - #line 3586 "Python/bytecodes.c" + #line 3594 "Python/bytecodes.c" PyObject *value = POP(); _Py_CODEUNIT *here = next_instr-1; int offset; @@ -5036,7 +5036,7 @@ } TARGET(EXTENDED_ARG) { - #line 3600 "Python/bytecodes.c" + #line 3608 "Python/bytecodes.c" assert(oparg); opcode = next_instr->op.code; oparg = oparg << 8 | next_instr->op.arg; @@ -5046,14 +5046,14 @@ } TARGET(CACHE) { - #line 3608 "Python/bytecodes.c" + #line 3616 "Python/bytecodes.c" assert(0 && "Executing a cache."); Py_UNREACHABLE(); #line 5053 "Python/generated_cases.c.h" } TARGET(RESERVED) { - #line 3613 "Python/bytecodes.c" + #line 3621 "Python/bytecodes.c" assert(0 && "Executing RESERVED instruction."); Py_UNREACHABLE(); #line 5060 "Python/generated_cases.c.h" pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy