diff options
author | Ken Jin <kenjin@python.org> | 2022-06-16 14:02:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-16 14:02:07 (GMT) |
commit | ab45c1dde0e46603342f751552f06b8deb294832 (patch) | |
tree | 1f44759763beb45e7e5ff4cff7852d184c438f62 | |
parent | d5be9a5dff6d86a531417d95fa5ee5297fc81b5c (diff) | |
download | cpython-ab45c1dde0e46603342f751552f06b8deb294832.zip cpython-ab45c1dde0e46603342f751552f06b8deb294832.tar.gz cpython-ab45c1dde0e46603342f751552f06b8deb294832.tar.bz2 |
Fix BINARY_SUBSCR_GETITEM stats (GH-93903)
-rw-r--r-- | Python/ceval.c | 11 | ||||
-rw-r--r-- | Python/specialize.c | 3 |
2 files changed, 7 insertions, 7 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index f9ec640..ca3797c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2240,16 +2240,15 @@ handle_eval_breaker: PyFunctionObject *getitem = (PyFunctionObject *)cached; DEOPT_IF(getitem->func_version != cache->func_version, BINARY_SUBSCR); PyCodeObject *code = (PyCodeObject *)getitem->func_code; - size_t size = code->co_nlocalsplus + code->co_stacksize + FRAME_SPECIALS_SIZE; assert(code->co_argcount == 2); - _PyInterpreterFrame *new_frame = _PyThreadState_BumpFramePointer(tstate, size); + STAT_INC(BINARY_SUBSCR, hit); + + Py_INCREF(getitem); + _PyInterpreterFrame *new_frame = _PyFrame_Push(tstate, getitem); if (new_frame == NULL) { goto error; } - CALL_STAT_INC(frames_pushed); - Py_INCREF(getitem); - _PyFrame_InitializeSpecials(new_frame, getitem, - NULL, code->co_nlocalsplus); + CALL_STAT_INC(inlined_py_calls); STACK_SHRINK(2); new_frame->localsplus[0] = container; new_frame->localsplus[1] = sub; diff --git a/Python/specialize.c b/Python/specialize.c index a3be97d..24fbe2f 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -1212,7 +1212,8 @@ _Py_Specialize_BinarySubscr( write_u32(cache->type_version, cls->tp_version_tag); int version = _PyFunction_GetVersionForCurrentState(func); if (version == 0 || version != (uint16_t)version) { - SPECIALIZATION_FAIL(BINARY_SUBSCR, SPEC_FAIL_OUT_OF_VERSIONS); + SPECIALIZATION_FAIL(BINARY_SUBSCR, version == 0 ? + SPEC_FAIL_OUT_OF_VERSIONS : SPEC_FAIL_OUT_OF_RANGE); goto fail; } cache->func_version = version; |